[ekiga] Added option for auto answer so that all endpoints support it.



commit 3fbe1d3a364026cb606fc1cbe392dd5dda3f8d43
Author: Damien Sandras <dsandras seconix com>
Date:   Wed May 13 19:39:42 2009 +0200

    Added option for auto answer so that all endpoints support it.
    
    If enabled, auto answering will be automatic.
    If disabled, auto answering calls can happen if specified at the
    protocol level.
---
 ekiga.schemas.in.in                               |   11 +++++++
 lib/engine/components/opal/h323-endpoint.cpp      |    5 +++
 lib/engine/components/opal/opal-call-manager.cpp  |   13 +++++++++
 lib/engine/components/opal/opal-call-manager.h    |    4 +++
 lib/engine/components/opal/opal-gmconf-bridge.cpp |    5 +++
 lib/engine/components/opal/sip-endpoint.cpp       |   31 ++++++++++-----------
 src/gui/preferences.cpp                           |    1 +
 7 files changed, 54 insertions(+), 16 deletions(-)

diff --git a/ekiga.schemas.in.in b/ekiga.schemas.in.in
index 64bbcc1..e58d82c 100644
--- a/ekiga.schemas.in.in
+++ b/ekiga.schemas.in.in
@@ -991,5 +991,16 @@
 	<long>Automatically reject or forward incoming calls if no answer is given after the specified amount of time (in seconds)</long>
       </locale>
     </schema>
+    <schema>
+      <key>/schemas/apps/@PACKAGE_NAME@/general/call_options/auto_answer</key>
+      <applyto>/apps/@PACKAGE_NAME@/general/call_options/auto_answer</applyto>
+      <owner>Ekiga</owner>
+      <type>bool</type>
+      <default>false</default>
+      <locale name="C">
+	<short>Automatic answer</short>
+	<long>If enabled, automatically answer incoming calls</long>
+      </locale>
+    </schema>
   </schemalist>
 </gconfschemafile>
diff --git a/lib/engine/components/opal/h323-endpoint.cpp b/lib/engine/components/opal/h323-endpoint.cpp
index 5d739c5..6349e22 100644
--- a/lib/engine/components/opal/h323-endpoint.cpp
+++ b/lib/engine/components/opal/h323-endpoint.cpp
@@ -419,6 +419,11 @@ Opal::H323::EndPoint::OnIncomingConnection (OpalConnection & connection,
 
       if (!forward_uri.empty () && manager.get_forward_on_no_answer ())
         call->set_no_answer_forward (manager.get_reject_delay (), forward_uri);
+      else if (manager.get_auto_answer ()) {
+        PTRACE (3, "Opal::Sip::EndPoint\tAuto-Answering incoming connection");
+        call->answer ();
+        return true;
+      }
       else
         call->set_reject_delay (manager.get_reject_delay ());
     }
diff --git a/lib/engine/components/opal/opal-call-manager.cpp b/lib/engine/components/opal/opal-call-manager.cpp
index d7eb9d6..5e00134 100644
--- a/lib/engine/components/opal/opal-call-manager.cpp
+++ b/lib/engine/components/opal/opal-call-manager.cpp
@@ -114,6 +114,7 @@ CallManager::CallManager (Ekiga::ServiceCore & _core)
   forward_on_busy = false;
   unconditional_forward = false;
   stun_enabled = false;
+  auto_answer = false;
 
   // Create video devices
   PVideoDevice::OpenArgs video = GetVideoOutputDevice();
@@ -303,6 +304,18 @@ unsigned CallManager::get_reject_delay () const
 }
 
 
+void CallManager::set_auto_answer (bool enabled)
+{
+  auto_answer = enabled;
+}
+
+
+bool CallManager::get_auto_answer (void) const
+{
+  return auto_answer;
+}
+
+
 const Ekiga::CodecList & CallManager::get_codecs () const
 {
   return codecs;
diff --git a/lib/engine/components/opal/opal-call-manager.h b/lib/engine/components/opal/opal-call-manager.h
index 0101cad..357265f 100644
--- a/lib/engine/components/opal/opal-call-manager.h
+++ b/lib/engine/components/opal/opal-call-manager.h
@@ -103,6 +103,9 @@ public:
     void set_reject_delay (unsigned delay);
     unsigned get_reject_delay () const;
 
+    void set_auto_answer (bool enabled);
+    bool get_auto_answer () const;
+
     void set_codecs (Ekiga::CodecList & codecs); 
     const Ekiga::CodecList & get_codecs () const;
 
@@ -187,6 +190,7 @@ private:
     bool unconditional_forward;
     bool forward_on_no_answer;
     bool stun_enabled;
+    bool auto_answer;
   };
 };
 #endif
diff --git a/lib/engine/components/opal/opal-gmconf-bridge.cpp b/lib/engine/components/opal/opal-gmconf-bridge.cpp
index e164162..e1d04fc 100644
--- a/lib/engine/components/opal/opal-gmconf-bridge.cpp
+++ b/lib/engine/components/opal/opal-gmconf-bridge.cpp
@@ -102,6 +102,7 @@ ConfBridge::ConfBridge (Ekiga::Service & _service)
   keys.push_back (CALL_FORWARDING_KEY "forward_on_busy");
   keys.push_back (CALL_FORWARDING_KEY "always_forward");
   keys.push_back (CALL_OPTIONS_KEY "no_answer_timeout");
+  keys.push_back (CALL_OPTIONS_KEY "auto_answer");
 
   keys.push_back (H323_KEY "enable_h245_tunneling");
   keys.push_back (H323_KEY "enable_early_h245");
@@ -358,6 +359,10 @@ void ConfBridge::on_property_changed (std::string key, GmConfEntry *entry)
 
     manager.set_reject_delay (gm_conf_entry_get_int (entry));
   }
+  else if (key == CALL_OPTIONS_KEY "auto_answer") {
+
+    manager.set_auto_answer (gm_conf_entry_get_bool (entry));
+  }
 
 
   //
diff --git a/lib/engine/components/opal/sip-endpoint.cpp b/lib/engine/components/opal/sip-endpoint.cpp
index de033e8..df65b57 100644
--- a/lib/engine/components/opal/sip-endpoint.cpp
+++ b/lib/engine/components/opal/sip-endpoint.cpp
@@ -106,7 +106,7 @@ Opal::Sip::EndPoint::EndPoint (Opal::CallManager & _manager,
     bank = smart.get ();
   }
 
-  auto_answer_call =  false;
+  auto_answer_call = false;
   protocol_name = "sip";
   uri_prefix = "sip:";
   listen_port = (_listen_port > 0 ? _listen_port : 5060);
@@ -948,6 +948,7 @@ Opal::Sip::EndPoint::OnIncomingConnection (OpalConnection &connection,
 					   OpalConnection::StringOptions * stroptions)
 {
   PTRACE (3, "Opal::Sip::EndPoint\tIncoming connection");
+  std::cout << "ici 2 " << auto_answer_call << std::endl <<std::flush;
 
   if (!forward_uri.empty () && manager.get_unconditional_forward ())
     connection.ForwardCall (forward_uri);
@@ -966,10 +967,11 @@ Opal::Sip::EndPoint::OnIncomingConnection (OpalConnection &connection,
 
       if (!forward_uri.empty () && manager.get_forward_on_no_answer ())
         call->set_no_answer_forward (manager.get_reject_delay (), forward_uri);
-      else if (auto_answer_call) {
-        call->answer ();
+      else if (auto_answer_call || manager.get_auto_answer ()) {
         auto_answer_call = false;
-        std::cout << "Should auto answer" << std::endl << std::flush;
+        PTRACE (3, "Opal::Sip::EndPoint\tAuto-Answering incoming connection");
+        call->answer ();
+        return true;
       }
       else // Pending
         call->set_reject_delay (manager.get_reject_delay ());
@@ -983,29 +985,26 @@ Opal::Sip::EndPoint::OnIncomingConnection (OpalConnection &connection,
 
 
 PBoolean 
-Opal::Sip::EndPoint::OnReceivedINVITE (OpalTransport & /*transport*/, 
-                                       SIP_PDU * pdu)
+Opal::Sip::EndPoint::OnReceivedINVITE (OpalTransport& transport, 
+                                       SIP_PDU* pdu)
 {
   if (pdu == NULL) 
-    return true;
+    return SIPEndPoint::OnReceivedINVITE (transport, pdu);
 
   PString str;
   int appearance;
 
   pdu->GetMIME ().GetAlertInfo (str, appearance);
-  static const char ringanswer[] = ";ring-answer=";
-  int autoanswer = -1;
-  PINDEX end = str.Find ('>');
-  PINDEX pos = str.Find (ringanswer, end);
+  static const char ringanswer[] = "Ring Answer";
+  PINDEX pos = str.Find (ringanswer);
 
   if (pos != P_MAX_INDEX) {
-    autoanswer = str.Mid (pos+sizeof (ringanswer)).AsUnsigned();
+    PTRACE (3, "Opal::Sip::EndPoint\tRing Answer in AlertInfo header, will Auto-Answer incoming connection");
+    auto_answer_call = true;
   }
+  std::cout << "ici" << std::endl <<std::flush;
 
-  if (autoanswer > 0)
-    std::cout << "Auto-Answer" << std::endl << std::flush;
-
-  return true;
+  return SIPEndPoint::OnReceivedINVITE (transport, pdu);
 }
 
 
diff --git a/src/gui/preferences.cpp b/src/gui/preferences.cpp
index 35c9b47..cff5e21 100644
--- a/src/gui/preferences.cpp
+++ b/src/gui/preferences.cpp
@@ -514,6 +514,7 @@ gm_pw_init_call_options_page (GtkWidget *prefs_window,
 
   /* Add all the fields */
   gnome_prefs_spin_new (subsection, _("Timeout to reject or forward unanswered incoming calls (in seconds):"), CALL_OPTIONS_KEY "no_answer_timeout", _("Automatically reject or forward incoming calls if no answer is given after the specified amount of time (in seconds)"), 10.0, 299.0, 1.0, 1, NULL, true);
+  gnome_prefs_toggle_new (subsection, _("_Automatically answer incoming calls"), CALL_OPTIONS_KEY "auto_answer", _("If enabled, automatically answer incoming calls"), 1);
 }
 
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]