Opened 7 years ago

Closed 5 years ago

#580 closed баг (fixed)

Вместо соединения с указанным хостом пульт выдаёт ошибку соединения с localhost

Reported by: san Owned by: alx
Priority: major Milestone: 1 очередь
Component: ПО MC04-Dispatcher. Пульт диспетчера/техника Keywords:
Cc:

Description (last modified by san)

Проявляется на машине у которой нет маршрута в интернет.
Видит ли эта машина сервер не знаю, странным кажется сам факт попытки соединиться с локалхост.
r943

содержимое дебаг-лога:

2017.12.26 13:31:41.574 [DEBUG  ] Loading config from C:/Users/telecom/AppData/Local/MC04Dispatcher.xml
2017.12.26 13:31:53.595 [DEBUG  ] sip_endpoint.c  .Creating endpoint instance...
2017.12.26 13:31:53.595 [DEBUG  ]          pjlib  .select() I/O Queue created (043D4BD8)
2017.12.26 13:31:53.595 [DEBUG  ] sip_endpoint.c  .Module "mod-msg-print" registered
2017.12.26 13:31:53.595 [DEBUG  ] sip_transport.  .Transport manager created.
2017.12.26 13:31:53.595 [DEBUG  ]   pjsua_core.c  .PJSUA state changed: NULL --> CREATED
2017.12.26 13:31:53.610 [INFO   ]   pjsua_core.c  .pjsua version 2.5.5 for  initialized
2017.12.26 13:31:53.610 [ERROR  ] error getting local IPv4 address
2017.12.26 13:31:53.610 [ERROR  ]   pjsua_core.c  Error creating transport: Unsupported transport (PJSIP_EUNSUPTRANSPORT) [status=171060]
2017.12.26 13:31:53.610 [ERROR  ] CPJSIPSUA::Init(): cannot create IPv4 TLS transport: Unsupported transport (PJSIP_EUNSUPTRANSPORT)
2017.12.26 13:31:53.610 [ERROR  ] error getting local IPv6 address
2017.12.26 13:31:53.610 [ERROR  ]   pjsua_core.c  Error creating transport: Unsupported transport (PJSIP_EUNSUPTRANSPORT) [status=171060]
2017.12.26 13:31:53.610 [ERROR  ] CPJSIPSUA::Init(): cannot create IPv6 TLS transport: Unsupported transport (PJSIP_EUNSUPTRANSPORT)

Таблица маршрутов, наверняка не нужна, ну раз уж есть...

Attachments (2)

1.png (30.9 KB ) - added by san 7 years ago.
2.jpg (42.5 KB ) - added by san 7 years ago.

Download all attachments as: .zip

Change History (26)

by san, 7 years ago

Attachment: 1.png added

by san, 7 years ago

Attachment: 2.jpg added

comment:1 by san, 7 years ago

Description: modified (diff)

in reply to:  description comment:2 by alx, 7 years ago

Replying to san:

... странным кажется сам факт попытки соединиться с локалхост.

Справедливости ради отмечу, что если 192.168.100.142 - локальный адрес, то в попытке соединения с localhost ничего странного нет...

in reply to:  description comment:3 by alx, 7 years ago

Replying to san:
Судя по этим записым в логе:

2017.12.26 13:31:53.610 [ERROR  ] error getting local IPv4 address
2017.12.26 13:31:53.610 [ERROR  ]   pjsua_core.c  Error creating transport: Unsupported transport (PJSIP_EUNSUPTRANSPORT) [status=171060]
2017.12.26 13:31:53.610 [ERROR  ] CPJSIPSUA::Init(): cannot create IPv4 TLS transport: Unsupported transport (PJSIP_EUNSUPTRANSPORT)
2017.12.26 13:31:53.610 [ERROR  ] error getting local IPv6 address
2017.12.26 13:31:53.610 [ERROR  ]   pjsua_core.c  Error creating transport: Unsupported transport (PJSIP_EUNSUPTRANSPORT) [status=171060]
2017.12.26 13:31:53.610 [ERROR  ] CPJSIPSUA::Init(): cannot create IPv6 TLS transport: Unsupported transport (PJSIP_EUNSUPTRANSPORT)

несоединение с базой данных - не единственная проблема этого компьютера. Пульт вообще не может определить свои локальные адреса и создать SIP транспорты... Похоже, на этом компьютере что-то не так с настройками сети...

Last edited 7 years ago by alx (previous) (diff)

comment:4 by san, 7 years ago

cannot create TLS transport - под Windows аналогичное поведение c созданием TLS транспорта на моих 2-х компьютерах.

определить свои локальные адреса

он не может потому что нет маршрутов в интернет

А адрес 192.168.100.142 не локальный, и маршрут в таблице присутствует : 192.168.100.0 mask: 255.255.255.0 interface: 192.168.100.177

in reply to:  4 ; comment:5 by alx, 7 years ago

Replying to san:

определить свои локальные адреса

он не может потому что нет маршрутов в интернет

Не думаю... Специально сейчас удалил маршрут по умолчанию, и это не помешало пульту выбрать адрес, создать транспорты и нормально работать.

in reply to:  5 ; comment:6 by alx, 7 years ago

Replying to alx:

он не может потому что нет маршрутов в интернет

Не думаю... Специально сейчас удалил маршрут по умолчанию, и это не помешало пульту выбрать адрес, создать транспорты и нормально работать.

Оказывается, я поторопился. :) Действительно, при удалении дефолтного маршрута пульт не может выбрать себе адрес, и сообщение "error getting local IPv4 address" в логе присутствует. Однако, созданию транспортов это не мешает...

in reply to:  6 comment:7 by alx, 7 years ago

Replying to alx:

Действительно, при удалении дефолтного маршрута пульт не может выбрать себе адрес,

Если еще точнее, функция pj_getdefaultipinterface() не может быбрать адрес и возвращает ошибку, однако далее при создании SIP транспортов PJSIP каким-то одразом адрес-таки себе выбирает.

comment:8 by san, 7 years ago

Но вопрос был про локалхост, почему sql клиент пытается подключиться к локалхосту когда указан внешний адрес?

in reply to:  8 comment:9 by alx, 7 years ago

Replying to san:

Но вопрос был про локалхост,

Я понимаю. :) Выше было "лирическое отступление". :) Возвращаемся к теме тикета.

почему sql клиент пытается подключиться к локалхосту когда указан внешний адрес?

Я не думаю, что он пытается подключиться к localhost. Алгоритм работы следующий:

  • При нажатии "Вход" пульт парсит (средствами PJSIP) URI, введенный в строку "Пользователь" (при необходимости добавляя слева "sip:"). В результате получает по-отдельности имя пользователя, имя хоста и номер порта.
  • Имя пользователя, имя хоста и введенный пользователем пароль передаются в mysql_real_connect().
  • mysql_real_connect() возвращает ошибку, которая отображается в нижней части диалога.

Возможные версии, как в сообщении об ошибке, возвращаемом libmysql, могло появится localhost:

  • пользователь ввел localhost в качестве имени домена (потом, уже после появления сообщения об ошибке, пользователь мог его изменить).
  • пользователь ввел домен 192.168.100.142, но PJSIP в процессе парсинга введенного URI почему-то заменил имя хоста на localhost, что и было передано в libmysql.
  • в libmysql было передано правильное имя хоста, но при выводе сообщения об ошибке имя хоста по неизвестным причинам было заменено на "localhost". Как вариант, libmydql обратилась к DNS с запросом PTR, и DNS вернул запись типа "142.100.168.192.in-addr.arpa PTR localhost."...
Version 0, edited 7 years ago by alx (next)

comment:10 by san, 7 years ago

Вот некоторые подробности:

  1. Пользователь вводит адрес сервера и нажимает "Вход"
  2. Связь с сервером есть - сервер пингуется с этой машины, более того - r830 запущенная на этой машине соединяется с сервером и работает.
  3. В сетевых настройках я какого-то "криминала" не заметил
    ==============================================================================
    Network Information
    ==============================================================================
       Host Name . . . . . . . . . . . . : mixyil
       Primary Dns Suffix  . . . . . . . :
       Node Type . . . . . . . . . . . . : Hybrid
       IP Routing Enabled. . . . . . . . : No
       WINS Proxy Enabled. . . . . . . . : No
    
    Wireless LAN adapter Local Area Connection* 3:
    
       Media State . . . . . . . . . . . : Media disconnected
       Connection-specific DNS Suffix  . :
       Description . . . . . . . . . . . : Microsoft Wi-Fi Direct Virtual Adapter
       Physical Address. . . . . . . . . : 3E-95-09-53-08-DD
       DHCP Enabled. . . . . . . . . . . : Yes
       Autoconfiguration Enabled . . . . : Yes
    
    Wireless LAN adapter Wi-Fi:
    
       Media State . . . . . . . . . . . : Media disconnected
       Connection-specific DNS Suffix  . :
       Description . . . . . . . . . . . : Qualcomm Atheros QCA9377 Wireless Network
     Adapter
       Physical Address. . . . . . . . . : 3C-95-09-53-08-DD
       DHCP Enabled. . . . . . . . . . . : Yes
       Autoconfiguration Enabled . . . . : Yes
    
    Ethernet adapter Bluetooth Network Connection:
    
       Media State . . . . . . . . . . . : Media disconnected
       Connection-specific DNS Suffix  . :
       Description . . . . . . . . . . . : Bluetooth Device (Personal Area Network)
       Physical Address. . . . . . . . . : 3C-95-09-53-08-DE
       DHCP Enabled. . . . . . . . . . . : Yes
       Autoconfiguration Enabled . . . . : Yes
    
    Ethernet adapter Ethernet:
    
       Connection-specific DNS Suffix  . :
       Description . . . . . . . . . . . : Realtek PCIe GBE Family Controller
       Physical Address. . . . . . . . . : 54-E1-AD-0C-01-AF
       DHCP Enabled. . . . . . . . . . . : No
       Autoconfiguration Enabled . . . . : Yes
       Link-local IPv6 Address . . . . . : fe80::e192:8bd0:f9ac:2cd7%3(Preferred)
       IPv4 Address. . . . . . . . . . . : 192.168.100.177(Preferred)
       Subnet Mask . . . . . . . . . . . : 255.255.255.0
       Default Gateway . . . . . . . . . :
       DHCPv6 IAID . . . . . . . . . . . : 55894445
       DHCPv6 Client DUID. . . . . . . . : 00-01-00-01-21-D2-24-72-54-E1-AD-0C-01-AF
    
       DNS Servers . . . . . . . . . . . : fec0:0:0:ffff::1%1
                                           fec0:0:0:ffff::2%1
                                           fec0:0:0:ffff::3%1
       NetBIOS over Tcpip. . . . . . . . : Enabled
    
    Tunnel adapter isatap.{E659C6E4-6B05-48E0-8F11-364999369181}:
    
       Media State . . . . . . . . . . . : Media disconnected
       Connection-specific DNS Suffix  . :
       Description . . . . . . . . . . . : Microsoft ISATAP Adapter
       Physical Address. . . . . . . . . : 00-00-00-00-00-00-00-E0
       DHCP Enabled. . . . . . . . . . . : No
       Autoconfiguration Enabled . . . . : Yes
    
    
######ROUTE PRINT
===========================================================================
Interface List
  8...3e 95 09 53 08 dd ......Microsoft Wi-Fi Direct Virtual Adapter
  7...3c 95 09 53 08 dd ......Qualcomm Atheros QCA9377 Wireless Network Adapter
  4...3c 95 09 53 08 de ......Bluetooth Device (Personal Area Network)
  3...54 e1 ad 0c 01 af ......Realtek PCIe GBE Family Controller
  1...........................Software Loopback Interface 1
  6...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter
===========================================================================

IPv4 Route Table
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
        127.0.0.0        255.0.0.0         On-link         127.0.0.1    306
        127.0.0.1  255.255.255.255         On-link         127.0.0.1    306
  127.255.255.255  255.255.255.255         On-link         127.0.0.1    306
    192.168.100.0    255.255.255.0         On-link   192.168.100.177    276
  192.168.100.177  255.255.255.255         On-link   192.168.100.177    276
  192.168.100.255  255.255.255.255         On-link   192.168.100.177    276
        224.0.0.0        240.0.0.0         On-link         127.0.0.1    306
        224.0.0.0        240.0.0.0         On-link   192.168.100.177    276
  255.255.255.255  255.255.255.255         On-link         127.0.0.1    306
  255.255.255.255  255.255.255.255         On-link   192.168.100.177    276
===========================================================================
Persistent Routes:
  None

in reply to:  10 comment:11 by alx, 7 years ago

Replying to san:

r830 запущенная на этой машине соединяется с сервером и работает.

Хм... Это наводит на мысль, что виновата все-таки PJSIP. В r853 вместо самописного (и кривого) парсинга введенного URI стали использовать pjsip_parse_uri()...

Странность в том, что в коде PJSIP строка "localhost" встречается только в самых безобидных местах (в комментариях, каких-то тестах и т.п.). В рабочем коде я "localhost" не обнаружил, поэтому полагал, что вряд ли оно могло его вернуть...

comment:12 by alx, 6 years ago

Саша, если проблема у тебя воспроизводится, хочется увидель запись в лог-файле "connecting to MySQL server xxx as user yyy". Или, если баг не воспроизводится, закрыть тикет как не воспроизводимый.

comment:13 by san, 6 years ago

Resolution: worksforme
Status: newclosed

Закрываю, у меня не воспроизводилось.

comment:14 by san, 5 years ago

Resolution: worksforme
Status: closedreopened

Воспроизвелось у меня
При попытке подключения пользователя 1@192.168.0.63 программа выдала ошибку: Ошибка соединения с базой данных: Can't connect to MySQL server on 'localhost' (10061).

Сетевые настройки компьютера

Адаптер Ethernet Ethernet:

   DNS-суффикс подключения . . . . . :
   IPv4-адрес. . . . . . . . . . . . : 192.168.0.90
   Маска подсети . . . . . . . . . . : 255.255.255.0
   Основной шлюз. . . . . . . . . : 192.168.0.13

C:\windows\system32>route print
===========================================================================
Список интерфейсов
  5...c4 65 16 34 16 6d ......Intel(R) Ethernet Connection (7) I219-LM
  1...........................Software Loopback Interface 1
===========================================================================

IPv4 таблица маршрута
===========================================================================
Активные маршруты:
Сетевой адрес           Маска сети      Адрес шлюза       Интерфейс  Метрика
          0.0.0.0          0.0.0.0     192.168.0.13     192.168.0.90     35
        127.0.0.0        255.0.0.0         On-link         127.0.0.1    331
        127.0.0.1  255.255.255.255         On-link         127.0.0.1    331
  127.255.255.255  255.255.255.255         On-link         127.0.0.1    331
      192.168.0.0    255.255.255.0         On-link      192.168.0.90    291
     192.168.0.90  255.255.255.255         On-link      192.168.0.90    291
    192.168.0.255  255.255.255.255         On-link      192.168.0.90    291
        224.0.0.0        240.0.0.0         On-link         127.0.0.1    331
        224.0.0.0        240.0.0.0         On-link      192.168.0.90    291
  255.255.255.255  255.255.255.255         On-link         127.0.0.1    331
  255.255.255.255  255.255.255.255         On-link      192.168.0.90    291
===========================================================================

Содержимое логов:
main

2020.01.21 09:24:08.570 [INFO   ] Программа запущенна, MC04-Dispatcher-v1.0-r1055
2020.01.21 09:24:08.571 [INFO   ] Конфигурация загружена
2020.01.21 09:24:08.571 [INFO   ] Начат процесс подключения к FreeSwitch серверу
2020.01.21 09:24:34.626 [ERROR  ] Ошибка соединения с базой данных: Can't connect to MySQL server on 'localhost' (10061)
2020.01.21 09:25:30.484 [INFO   ] Выход из программы, подключения к Freeswitch серверу не было

debug

2020.01.21 09:24:08.324 [DEBUG  ] Loading config from C:/Users/admin/AppData/Local/MC04Dispatcher.xml
2020.01.21 09:24:30.039 [DEBUG  ] sip_endpoint.c  .Creating endpoint instance...
2020.01.21 09:24:30.039 [DEBUG  ]          pjlib  .select() I/O Queue created (054AC0A8)
2020.01.21 09:24:30.039 [DEBUG  ] sip_endpoint.c  .Module "mod-msg-print" registered
2020.01.21 09:24:30.040 [DEBUG  ] sip_transport.  .Transport manager created.
2020.01.21 09:24:30.040 [DEBUG  ]   pjsua_core.c  .PJSUA state changed: NULL --> CREATED
2020.01.21 09:24:31.090 [INFO   ]   pjsua_core.c  .pjsua version 2.6 for  initialized
2020.01.21 09:24:31.098 [DEBUG  ] local IPv4 address is 192.168.0.90
2020.01.21 09:24:31.098 [ERROR  ] error getting local IPv6 address
2020.01.21 09:24:32.609 [DEBUG  ] connecting to MySQL server "" as user "sip"

Конфиг

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <LastStart>
        <LoginDialog MonitorID="0" xPos="640" yPos="200"/>
        <MainWindow WindowState="2" xPos="-8" yPos="-8" WWindow="1920" HWindow="1017"/>
    </LastStart>
    <Environment>
        <ShowLog>true</ShowLog>
        <ShowCursor>true</ShowCursor>
        <ShowNumRegistered>true</ShowNumRegistered>
        <PhoneBookPath>phonebook.txt</PhoneBookPath>
        <PhoneBookFontSize>14</PhoneBookFontSize>
    </Environment>
    <Connection>
        <TelephoneGateway>pstn</TelephoneGateway>
        <AlarmDelay>30</AlarmDelay>
        <CallTimeout>120</CallTimeout>
        <SIPClientReregistration>3600</SIPClientReregistration>
        <ExternalUA>false</ExternalUA>
        <BindAddress Auto="true"/>
        <SIPTransport>0</SIPTransport>
        <SRTPMode>0</SRTPMode>
    </Connection>
    <Conference>
        <SwitchToConference>auto</SwitchToConference>
        <PrimaryConferenceDisplayName></PrimaryConferenceDisplayName>
        <NewConferencePrefix>конференция-</NewConferencePrefix>
        <DisplayDisconnected>5</DisplayDisconnected>
        <DisplayFailedCalls>5</DisplayFailedCalls>
        <PrimaryConferenceId>0</PrimaryConferenceId>
    </Conference>
    <Mixer>
        <InputSoundDevice InputSoundDeviceName="Микрофон (2- Chat 50)" InputSoundDeviceVolume="100"/>
        <OutputSoundDevice OutputSoundDeviceName="Динамики (2- Chat 50)" OutputSoundDeviceVolume="100"/>
        <SystemSoundDevice SystemSoundDeviceName="Динамики (2- Chat 50)" SystemSoundDeviceVolume="100"/>
        <AlarmSound>true</AlarmSound>
    </Mixer>
    <Users>
        <User sip-uri="1@192.168.0.63"/>
        <UserFileTemplate>/etc/freeswitch/directory/default/%1.xml</UserFileTemplate>
    </Users>
    <PstnDialHistory/>
</root>

comment:15 by san, 5 years ago

Странно что ещё недавно, та же программа стой же машины подключалась успешно к 0.63 тем же пользователем и работала...
Не понимаю пока что же изменилось. Я менял сетевые настройки, но затем вернул их обратно.

comment:16 by san, 5 years ago

После нажатия кнопки Вход, ловлю сниффером несколько пакетов в направлении ::1 -> ::1 и 127.0.0.1 -> 127.0.0.1 на порт 3306

comment:17 by san, 5 years ago

Не понимаю пока что же изменилось.

Алексей. я нашёл разницу.
Т.к. пользователю IPv6 был не нужен, я его отключил, в настройках сетевого адаптера и после этого программа стала выдавать ошибку. Сейчас снова включил IPv6 и программа успешно подключилась к БД.

Last edited 5 years ago by san (previous) (diff)

in reply to:  14 comment:18 by alx, 5 years ago

Replying to san:

Воспроизвелось у меня

Попробуй, пожалуйста, воспроизвести, вводя sip:1@192.168.0.63 и <sip:1@192.168.0.63>

comment:19 by san, 5 years ago

Для обоих экпериментов, попытка подключения заканчивается ошибкой, лог одинаковый:

2020.01.21 12:44:19.279 [DEBUG  ] Loading config from C:/Users/admin/AppData/Local/MC04Dispatcher.xml
2020.01.21 12:44:51.509 [DEBUG  ] sip_endpoint.c  .Creating endpoint instance...
2020.01.21 12:44:51.509 [DEBUG  ]          pjlib  .select() I/O Queue created (0589B910)
2020.01.21 12:44:51.509 [DEBUG  ] sip_endpoint.c  .Module "mod-msg-print" registered
2020.01.21 12:44:51.509 [DEBUG  ] sip_transport.  .Transport manager created.
2020.01.21 12:44:51.509 [DEBUG  ]   pjsua_core.c  .PJSUA state changed: NULL --> CREATED
2020.01.21 12:44:52.560 [INFO   ]   pjsua_core.c  .pjsua version 2.6 for  initialized
2020.01.21 12:44:52.560 [DEBUG  ] local IPv4 address is 192.168.0.90
2020.01.21 12:44:52.561 [ERROR  ] error getting local IPv6 address
2020.01.21 12:44:54.085 [DEBUG  ] connecting to MySQL server "" as user "sip"

comment:20 by san, 5 years ago

Алексей. попробуй у себя воспроизвести в условиях

[ERROR ] error getting local IPv6 address

Я подозреваю, что описываемый баг воспроизведётся.

in reply to:  20 ; comment:21 by alx, 5 years ago

Replying to san:

Алексей. попробуй у себя воспроизвести в условиях

[ERROR ] error getting local IPv6 address

Я подозреваю, что описываемый баг воспроизведётся.

В этих условиях он у меня просто падает... :(

in reply to:  21 comment:22 by alx, 5 years ago

Replying to alx:

В этих условиях он у меня просто падает... :(

Как оказалось, он падает, когда пытается получить имя хоста после парсинга логина. Наверное можно считать, что проблема все-таки воспроизвелась, хоть и проявляется немного иначе...

comment:23 by san, 5 years ago

В этих условиях он у меня просто падает

В #588 тоже так и происходит

Last edited 5 years ago by san (previous) (diff)

comment:24 by alx, 5 years ago

Resolution: fixed
Status: reopenedclosed

In 1056/dispatcher:

Парсинг введенного URI теперь делается не средствами pjsip, который иногда возвращает мусор,
а средствами Qt. Closes #580.

Note: See TracTickets for help on using tickets.