Автор Тема: Ekiga 4.0.1  (Прочитано 7899 раз)

Оффлайн keremet

  • Global Moderator
  • ROOT
  • *****
  • Сообщений: 463
  • Репутация: +237/-0
    • Просмотр профиля
    • OpenSolaris
Ekiga 4.0.1
« : Декабрь 08, 2016, 01:15:15 pm »
Открывает порты на каждом сетевом интерфейсе. Хотелось бы, чтобы открывала только на заданном.

Посмотрим, где это происходит
Для начала поставим gc++filt, если его еще нет
sudo pkg install pkg:/developer/gnu-binutils@2.25.1-2016.0.1.2
Запустим скрипт, а  потом екигу
sudo dtrace -n 'syscall::so_socket:entry/execname=="ekiga"/{ if((arg0 == 2)&&(arg1 == 2)&&(arg2 == 0)){ustack(); printf("family = %d, type_w_flags = %d, protocol = %d\n", arg0, arg1, arg2);} }'|gc++filt
dtrace: description 'syscall::so_socket:entry' matched 5 probes
CPU     ID                    FUNCTION:NAME
  0  12832                  so_socket:entry
              libc.so.1`_so_socket+0x15
              libsocket.so.1`__xnet_socket+0x23
              libpt.so.2.10.11`PSocket::os_socket(int, int, int)+0x25
              libpt.so.2.10.11`PTCPSocket::OpenSocket(int)+0x29
              libpt.so.2.10.11`PIPSocket::Listen(PIPSocket::Address const&, unsigned int, unsigned short, PSocket::Reusability)+0x1fe
              libpt.so.2.10.11`PTCPSocket::Listen(PIPSocket::Address const&, unsigned int, unsigned short, PSocket::Reusability)+0x2b
              libopal.so.3.10.10`OpalListenerTCP::Open(PNotifierTemplate<int> const&, OpalListener::ThreadMode)+0x1e6
              libopal.so.3.10.10`OpalEndPoint::StartListener(OpalListener*)+0xaf
              libopal.so.3.10.10`OpalEndPoint::StartListener(OpalTransportAddress const&)+0x17b
              libopal.so.3.10.10`OpalEndPoint::StartListeners(PStringArray const&)+0x104
              libekiga.so`Opal::H323::EndPoint::set_listen_port(unsigned int)+0x11f
              libekiga.so`Opal::H323::EndPoint::EndPoint(Opal::CallManager&, Ekiga::ServiceCore&, unsigned int, unsigned int)+0x1e2
              libekiga.so`OPALSpark::try_initialize_more(Ekiga::ServiceCore&, int*, char***)+0x8da
              libekiga.so`Ekiga::KickStart::kick(Ekiga::ServiceCore&, int*, char***)+0x2c0
              libekiga.so`engine_init(boost::shared_ptr<Ekiga::ServiceCore>, int, char**)+0x838
              ekiga`main+0x30e
              ekiga`_start+0x83
family = 2, type_w_flags = 2, protocol = 0

COMPONENT_NAME=opal
COMPONENT_VERSION=3.10.10
COMPONENT_SRC=$(COMPONENT_NAME)-$(COMPONENT_VERSION)
COMPONENT_ARCHIVE= $(COMPONENT_SRC).tar.xz

wget http://ftp.gnome.org/pub/GNOME/sources/$COMPONENT_NAME/3.10/$COMPONENT_ARCHIVE

wget http://ftp.gnome.org/pub/GNOME/sources/ekiga/4.0/ekiga-4.0.1.tar.xz

Протокол UDP
sudo soconfig -l

sudo dtrace -n 'syscall::so_socket:entry/execname=="ekiga"/{ if(((arg0 == 2)||(arg0 == 26))&&(arg1 == 1)){ustack(); printf("family = %d, type_w_flags = %d, protocol = %d\n", arg0, arg1, arg2);} }'|gc++filt




  1   8082                  so_socket:entry
              libc.so.1`_so_socket+0x7
              libsocket.so.1`__xnet_socket+0x23
              libpt.so.2.10.11`PSocket::os_socket(int, int, int)+0x25
              libpt.so.2.10.11`PUDPSocket::OpenSocket(int)+0x29
              libpt.so.2.10.11`PUDPSocket::PUDPSocket(unsigned short, int)+0xfd
              libpt.so.2.10.11`PMonitoredSockets::CreateSocket(PMonitoredSockets::SocketInfo&, PIPSocket::Address const&)+0x91
              libpt.so.2.10.11`PMonitoredSocketBundle::OpenSocket(PString const&)+0x56
              libpt.so.2.10.11`PMonitoredSocketBundle::Open(unsigned short)+0xc5
              libopal.so.3.10.10`OpalListenerUDP::Open(PNotifierTemplate<int> const&, OpalListener::ThreadMode)+0x3c
              libopal.so.3.10.10`OpalEndPoint::StartListener(OpalListener*)+0xaf
              libopal.so.3.10.10`OpalEndPoint::StartListener(OpalTransportAddress const&)+0x17b
              libopal.so.3.10.10`OpalEndPoint::StartListeners(PStringArray const&)+0x104
              libekiga.so`Opal::Sip::EndPoint::set_listen_port(unsigned int)+0x13c
              libekiga.so`Opal::Sip::EndPoint::EndPoint(Opal::CallManager&, Ekiga::ServiceCore&, unsigned int)+0x550
              libekiga.so`OPALSpark::try_initialize_more(Ekiga::ServiceCore&, int*, char***)+0x811
              libekiga.so`Ekiga::KickStart::kick(Ekiga::ServiceCore&, int*, char***)+0x2c0
              libekiga.so`engine_init(boost::shared_ptr<Ekiga::ServiceCore>, int, char**)+0x838
              ekiga`main+0x30e
              ekiga`_start+0x83
family = 2, type_w_flags = 1, protocol = 0

Поменял тут: libekiga.so`Opal::Sip::EndPoint::set_listen_port(unsigned int)
ekiga-4.0.1/lib/engine/components/opal/sip-endpoint.cpp
Opal::Sip::EndPoint::set_listen_port (unsigned port)
{
  unsigned udp_min, udp_max;

  listen_iface.protocol = "udp";
  listen_iface.voip_protocol = "sip";
  listen_iface.id = "*";

  manager.get_udp_ports (udp_min, udp_max);

  if (port > 0) {

    std::stringstream str;
    RemoveListener (NULL);

    str << "udp$192.168.1.1:" << port; //!
    if (!StartListeners (PStringArray (str.str ()))) {

      port = udp_min;
      str << "udp$*:" << port;
      while (port <= udp_max) {

        if (StartListeners (PStringArray (str.str ()))) {

          listen_iface.port = port;
          return true;
        }

        port++;
      }
    }
    else {
      listen_iface.port = port;
      return true;
    }
  }

  return false;
}


Отключить STUN
#define NAT_KEY "/apps/" PACKAGE_NAME "/general/nat/"

  else if (key == NAT_KEY "stun_server") {

    gchar* stun_server = gm_conf_entry_get_string (entry);
    manager.set_stun_server (stun_server ? stun_server : "stun.ekiga.net");
    g_free (stun_server);
  }
  else if (key == NAT_KEY "enable_stun") {

    manager.set_stun_enabled (gm_conf_entry_get_bool (entry));
  }