Changeset 9b6eca57342f7056dda0aa56262a4b5c399c1a77

Show
Ignore:
Timestamp:
09/08/08 23:48:48 (5 years ago)
Author:
Armin Burgmeier <armin@…>
Parents:
33c52287f29995de28e64ad9533a4d3455bb2c3f
Children:
e7981e590143ccddaf3c19fe3d9297f0ace08a0f
git-committer:
Armin Burgmeier <armin@arbur.net> / 2008-09-08T23:48:48Z+0200
Message:

Use address from zeroconf for session connection, fixing link-local IPv6

2008-09-08 Armin Burgmeier <armin@…>

  • inc/joindialog.hpp:
  • src/joindialog.cpp: Added address column to zeroconf session list, return on get_address() if host and port matches the selection.
  • inc/joinprogressdialog.hpp:
  • src/joinprogressdialog.cpp: Take a net6::address* that is used for connection establishment when set (otherwise hostname/port).
Files:
7 modified

Legend:

Unmodified
Added
Removed
  • ChangeLog

    r33c5228 r9b6eca5  
     12008-09-08  Armin Burgmeier  <armin@0x539.de> 
     2 
     3        * inc/joindialog.hpp: 
     4        * src/joindialog.cpp: Added address column to zeroconf session list, 
     5        return on get_address() if host and port matches the selection. 
     6 
     7        * inc/joinprogressdialog.hpp: 
     8        * src/joinprogressdialog.cpp: Take a net6::address* that is used for 
     9        connection establishment when set (otherwise hostname/port). 
     10 
     11        * inc/window.hpp: 
     12        * src/window.cpp: Set address of JoinProgressDialog from JoinDialog. 
     13 
    1142008-09-08  Philipp Kern  <phil@0x539.de> 
    215 
  • inc/joindialog.hpp

    rbe1b56b r9b6eca5  
    2828#include "features.hpp" 
    2929#include "colorsel.hpp" 
     30 
     31#include <net6/address.hpp> 
     32 
    3033#ifdef WITH_ZEROCONF 
    3134#include <gtkmm/box.h> 
     
    3437#include <gtkmm/liststore.h> 
    3538#include <sigc++/connection.h> 
    36 #include <net6/address.hpp> 
    3739#include <obby/zeroconf.hpp> 
    3840#endif 
     
    5355                Gtk::TreeModelColumn<Glib::ustring> host; 
    5456                Gtk::TreeModelColumn<unsigned int> port; 
     57                Gtk::TreeModelColumn<net6::address*> address; 
    5558        }; 
    5659#endif 
     
    6871        Glib::ustring get_host() const; 
    6972        unsigned int get_port() const; 
     73        const net6::address* get_address(); 
    7074        Glib::ustring get_name() const; 
    7175        Gdk::Color get_color() const; 
  • inc/joinprogressdialog.hpp

    re03285f r9b6eca5  
    3636                           Config::ParentEntry& config_entry, 
    3737                           const Glib::ustring& hostname, 
    38                            unsigned int port, 
     38                           unsigned int port, 
     39                           const net6::address* addr, 
    3940                           const Glib::ustring& username, 
    4041                           const Gdk::Color& color); 
     
    150151        Glib::ustring m_hostname; 
    151152        unsigned int m_port; 
     153        std::auto_ptr<net6::address> m_address; 
    152154        Glib::ustring m_username; 
    153155        Gdk::Color m_color; 
  • inc/window.hpp

    r88d9d5e r9b6eca5  
    176176        bool session_join_impl(const Glib::ustring& host, 
    177177                               unsigned int port, 
     178                               const net6::address* addr, 
    178179                               const Glib::ustring& name, 
    179180                               const Gdk::Color& color); 
  • src/joindialog.cpp

    r33c5228 r9b6eca5  
    3838        add(host); 
    3939        add(port); 
     40        add(address); 
    4041} 
    4142#endif 
     
    185186Gobby::JoinDialog::~JoinDialog() 
    186187{ 
     188#ifdef WITH_ZEROCONF 
     189        const Gtk::TreeModel::Children& children = m_session_list->children(); 
     190        for(Gtk::TreeIter iter = children.begin(); 
     191            iter != children.end(); ++ iter) 
     192        { 
     193                net6::address* addr = (*iter)[m_session_cols.address]; 
     194                delete addr; 
     195        } 
     196#endif 
    187197} 
    188198 
     
    195205{ 
    196206        return static_cast<unsigned int>(m_ent_port.get_value() ); 
     207} 
     208 
     209const net6::address* Gobby::JoinDialog::get_address() 
     210{ 
     211#ifdef WITH_ZEROCONF 
     212        // m_session_view.get_selection() is not const, therefore this function 
     213        // cannot be const. 
     214        Gtk::TreeModel::iterator iter = 
     215                m_session_view.get_selection()->get_selected(); 
     216        if(iter != m_session_list->children().end()) 
     217        { 
     218                // Use address with port info if selected from zeroconf 
     219                if(get_host() == (*iter)[m_session_cols.host] && 
     220                   get_port() == (*iter)[m_session_cols.port]) 
     221                { 
     222                        return (*iter)[m_session_cols.address]; 
     223                } 
     224        } 
     225#endif 
     226        return NULL; 
    197227} 
    198228 
     
    277307        // must implement get_port(). 
    278308        row[m_session_cols.port] = addr.get_port(); 
     309        row[m_session_cols.address] = addr.clone(); 
    279310 
    280311        m_ep_discover.set_expanded(true); 
     
    285316        Gtk::TreeModel::iterator iter = find_entry(name); 
    286317        if(iter == m_session_list->children().end() ) return; 
     318 
     319        net6::address* addr = (*iter)[m_session_cols.address]; 
     320        delete addr; 
     321 
    287322        m_session_list->erase(iter); 
    288323} 
  • src/joinprogressdialog.cpp

    re03285f r9b6eca5  
    301301Gobby::JoinProgressDialog::JoinProgressDialog(Gtk::Window& parent, 
    302302                                              Config::ParentEntry& config_entry, 
    303                                               const Glib::ustring& hostname, 
     303                                              const Glib::ustring& hostname, 
    304304                                              unsigned int port, 
     305                                              const net6::address* addr, 
    305306                                              const Glib::ustring& username, 
    306307                                              const Gdk::Color& color): 
    307308        ProgressDialog(_("Joining obby session..."), parent), 
    308309        m_config_entry(config_entry), m_hostname(hostname), m_port(port), 
    309         m_username(username), m_color(color), m_got_welcome(false), 
    310         m_got_done(false) 
     310        m_address(addr ? addr->clone() : NULL), m_username(username), 
     311        m_color(color), m_got_welcome(false), m_got_done(false) 
    311312{ 
    312313        obby::format_string str("Connecting to %0%..."); 
     
    329330#endif 
    330331        // Connection data 
    331         Glib::ustring hostname = m_hostname; // Remote host name 
    332         unsigned int port = m_port; // TCP port number 
     332        const Glib::ustring hostname = m_hostname; 
     333        unsigned int port = m_port; 
     334        std::auto_ptr<net6::address> address( 
     335                m_address.get() ? m_address->clone() : NULL); 
    333336 
    334337        // Dialog may be closed now 
     
    364367                        sigc::mem_fun(*this, &JoinProgressDialog::on_close) ); 
    365368 
    366                 // Establish connection 
    367                 buffer->connect(hostname, port); 
     369                if(address.get()) 
     370                        // Establish connection 
     371                        buffer->connect(*address); 
     372                else 
     373                        buffer->connect(hostname, port); 
    368374        } 
    369375        catch(net6::error& e) 
  • src/window.cpp

    rea67c51 r9b6eca5  
    12391239                Glib::ustring host = m_join_dlg->get_host(); 
    12401240                unsigned int port = m_join_dlg->get_port(); 
     1241                const net6::address* addr = m_join_dlg->get_address(); 
    12411242                Glib::ustring name = m_join_dlg->get_name(); 
    12421243                Gdk::Color color = m_join_dlg->get_color(); 
    12431244 
    1244                 if(session_join_impl(host, port, name, color) ) 
     1245                if(session_join_impl(host, port, addr, name, color) ) 
    12451246                        break; 
    12461247                else 
     
    13041305bool Gobby::Window::session_join_impl(const Glib::ustring& host, 
    13051306                                      unsigned int port, 
     1307                                      const net6::address* addr, 
    13061308                                      const Glib::ustring& name, 
    13071309                                      const Gdk::Color& color) 
     
    13121314                host, 
    13131315                port, 
     1316                addr, 
    13141317                name, 
    13151318                color