Задать вопрос
  • Как диагностировать проблему со звуком в Asterisk?

    @romaro Автор вопроса
    Valentin Barbolin, транспорт:
    [udp-transport]
    type=transport
    protocol=udp
    bind=0.0.0.0:5090 ;custom port, default 5060
    external_media_address=77.232.***.***
    external_signaling_address=77.232.***.***
    tos=cs3
    cos=3
    allow_reload=yes


    Шаблон эндпоинтов:

    [endpoint-basic](!)
    type=endpoint
    transport=udp-transport
    context=from-internal
    disallow=all
    allow=alaw
    allow=ulaw
    direct_media=no
    rtp_symmetric=yes
    force_rport=yes
    rewrite_contact=yes

    [auth-userpass](!)
    type=auth
    auth_type=userpass

    [aor-single-reg](!)
    type=aor
    max_contacts=2


    Вызывающий пир:

    [1001](endpoint-basic)
    deny=0.0.0.0/0.0.0.0 ;Запрет всех регистраций
    permit=89.109.***.*** ;Регистрация только с этого адреса
    auth=auth1001
    aors=1001
    callerid=Roman <1001>
    [auth1001](auth-userpass)
    username=1001
    password=******
    [1001](aor-single-reg)
    Написано
  • Как диагностировать проблему со звуком в Asterisk?

    @romaro Автор вопроса
    Valentin Barbolin,
    в гугле поищи

    Ну так это ж относится к файлу sip.conf, а у меня вообще chan_sip выгружен (noload)
    малова-то

    В смысле? Все настройки из конфига скинул.
    Написано
  • Как диагностировать проблему со звуком в Asterisk?

    @romaro Автор вопроса
    Valentin Barbolin,

    nat=yes / nat=force_rport,comedia - включено


    Это в каком конфиг-файле?
    Написано
  • Как диагностировать проблему со звуком в Asterisk?

    @romaro Автор вопроса
    Valentin Barbolin, инвайт первого плеча (от телефона до сервера):
    683b1b9c8b132827691765.png
    Написано
  • Как диагностировать проблему со звуком в Asterisk?

    @romaro Автор вопроса
    Valentin Barbolin, первый (стационарный) телефон вызывает софтфон (zoiper). Вот ответ софтфона. Оба устройства в данном случае в одной локальной сети (за натом у 89.109...). Астериск на удаленном сервере с белым IP 77.232...
    683a28f5b6aad261262593.png
    Написано
  • Почему Asterisk создает messages.log с владельцем root, а не asterisk?

    @romaro Автор вопроса
    Valentin Barbolin, проблема в этой строчке?
    68027888d288e632590088.png
    Написано
  • Почему Asterisk создает messages.log с владельцем root, а не asterisk?

    @romaro Автор вопроса
    Valentin Barbolin, если вы имеете в виду стратегию ротации логов в logger.conf, то там вот так:
    680165d28f9c3705706204.png

    Процесс, если я правильно понимаю, принадлежит пользователю asterisk:
    680166213a591543084406.png
    Написано
  • Можно ли получить значение свойства, прототип которого помечен в интерфейсе атрибутом?

    @romaro Автор вопроса
    Спасибо! Я думал, есть способ компактнее. Вынесу тогда в методы расширения.
    Написано
  • Почему микротик не пускает в интернет?

    @romaro Автор вопроса
    Спасибо! Проблема действительно была в файрволле
    Написано
  • Почему микротик не пускает в интернет?

    @romaro Автор вопроса
    Артём, Превышен интервал ожидания для запроса. По прямому ip то же самое.
    Написано
  • Почему микротик не пускает в интернет?

    @romaro Автор вопроса
    Юрий MikroTik, отключил. Ну вот mac-адреса вроде совпадают:
    67f7dbc972067197557294.png
    Написано
  • Почему микротик не пускает в интернет?

    @romaro Автор вопроса
    Юрий MikroTik, вроде бы нет. Все устройства получают адреса динамически. Имя подключенного устройства совпадает с именем компьютера
    67f7d3931e11a889253916.png
    Написано
  • Как правильно инициализировать библиотеку классов в .NET?

    @romaro Автор вопроса
    Ну так DI то у меня доступен исключительно на уровне приложения. Или ты предлагаешь все элементы из Lib.Controls проинициализировать в корне композиции и запихнуть DI?

    Хорошо, я создам класс команды и помещу его в контейнер, передав зависимость от сервиса этикеток через конструктор (возможно DI сам будет инициализировать):
    ...
                // Command
                var printCommand = new ShowCargoLabelPrintWindowCommand(labelService);
    
                var host = Host.CreateDefaultBuilder()
                .ConfigureServices(services =>
                {
    ...
                    services.AddSingleton<ShowCargoLabelPrintWindowCommand>(printCommand);
                })
                .Build();


    Но как быть с визуальными компонентами? Например, у меня в Lib.Controls есть форма, а не ней кнопка, по которой должна вызываться данная команда. Как же я смогу извлечь для нее команду из контейнера, если библиотека ничего не знает о DI, который собран на стороне приложения?
    <Button Command="{Binding Source={x:Static c:CommonCommands.ShowCargoLabelPrintWindowCommand}}" CommandParameter="{Binding Cargo}" Content="Печать этикетки грузоместа" Margin="5" Padding="0,5" Style="{DynamicResource printCargoLabelButtonStyle}"/>


    Я планировал преобразовать фабрику CommonControls в сервис команд, инициализировать этот сервис в корне и так же поместить в DI, а затем, в библиотеке, получать ссылку на нужную команду таким образом:
    <Button Command="{Binding Source={x:Static local:ApplicationHost.GetCommand<ShowCargoLabelPrintWindowCommand>()}}" CommandParameter="{Binding Cargo}"/>


    То есть библиотеке в любом случае нужен ApplicationHost или что-то в этом роде.

    Или ты предлагаешь еще и все визуальные компоненты запихнуть в DI? Теоретически это возможно, если создать для каждого из них отдельный конструктор, куда будут передаваться все нужные зависимости и тогда биндинг будет выполняться к самому классу компонента.

    Но это выглядит громоздко... Я действительно хочу понять, как можно (и стоит ли) избавляться от передачи зависимостей через ApplicationHost.
  • Как называть методы, которые не обрабатывают исключений?

    @romaro Автор вопроса
    Вот и гугл мне ничего не находит. Но привычка акцентировать внимание на таких методах уже сформировалась. Пока буду выпиливать приставку Try, чтобы не нарушать устоявшийся паттерн, и заменять на атрибут:
    [AttributeUsage(AttributeTargets.Method)]
        public class ThrowableAttribute : Attribute
        {
        }
  • Как правильно называть такую композицию классов?

    @romaro Автор вопроса
    Наверное, тут нужно пояснить, что я работаю с фреймворком WinForms. Давайте на конкретном примере. У меня в UI-библиотеке есть компонент, который выглядит следующим образом:
    64f219cc44905540595566.jpeg
    По кнопке [+] должен открываться другая форма для создания конкретного объекта. Но класс этой формы, естественно, описан в самом приложении, библиотека о нем ничего не знает. Поэтому мне кажется, что приемлемым был бы такой код для контрола:
    void BtnCreate_Click(object? sender, EventArgs e)
            {
                /// Получаю интерфейсную ссылку на экземпляр формы. Для этого передаю
                /// в метод ссылку на вью-модель (_ctx). Конечно, я мог бы во все вью-
                /// модели запихнуть логику получения форм, но это бы грубо нарушило
                /// принцип единой ответственности для вью-моделей.
                using IDependableForm form = FormsFactory.GetCreateForm(_ctx);
                /// Подписываюсь на событие закрытия формы, чтобы определенным
                /// образом изменить состояние компонента.
                form.OnFormClosing += DependableForm_Closing;
                /// Показываю форму модально, чтобы не усложнять приложение попыткой
                /// отследить родителя.
                form.ShowAsModal();
            }


    То есть это действительно напоминает абстрактную фабрику, только в каком-то реверсивном варианте. И я бы даже сказал, что похоже на максимально прозрачный декоратор с фабричными методами. В пользу декоратора говорит и то, что "фабрика" и "движок" реализуют один и тот же интерфейс.

    Возможно, этот вариант паттерна было бы уместно назвать "статический декоратор" и его особенность в том, что декоратор создается прежде декорируемого им объекта, который вообще никогда может не появиться.

    Или более правильным будет "реверсивный декоратор", поскольку суть его в том, что часть приложения фактически передается в управление библиотеке.