freeswitchforum.com

Форум поддержки FreeSWITCH

FreeSWITCH is a registered trademark of Anthony Minessale. Official FreeSWITCH site.

Текущее время: 27 апр 2024 18:48

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Сопоставление адресов
СообщениеДобавлено: 03 июн 2015 15:32 

Зарегистрирован: 13 май 2015 15:53
Сообщения: 124
Вопрос:
у сервера есть внутренний адрес(IP1) и порт, проброшенный на роутере с внешним фиксированным адресом(IP2).
внешний адрес прописан в external_sip_ip.

Звонки проходят нормально, но при использовании текстовых сообщений получается следующая ерунда:
при использовании номера получателя, сервер(или по клиента, хз) подставляет xxxx@IP2 и не может найти такого абонента
Цитата:
sofia_presence.c:225 Can't find registered user

если в программе-клиенте указать номер получателя вручную как xxxx@IP1 то все отправляется нормально.

Собственно, подскажите, как заставить сервер понимать оба контекста IP адресов? чтобы было равноценно xxxx@IP2 и xxxx@IP1?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сопоставление адресов
СообщениеДобавлено: 03 июн 2015 20:16 
FreeSWITCH_GuRu

Зарегистрирован: 22 авг 2012 09:52
Сообщения: 1710
только обработкой скриптом mod_sms

_________________
ЛС: @rostel
Сообщество: @ru_freeswitch


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сопоставление адресов
СообщениеДобавлено: 04 июн 2015 11:15 

Зарегистрирован: 13 май 2015 15:53
Сообщения: 124
Я нашел кое-что, но с lua скриптами совершенно не знаком

Код:
-------------------- chatplan

<extension name="sms_test">
      <condition field="destination_number" expression="^(.*)$">
        <action application="lua" data="lua/sms.lua"/>
      </condition>
</extension>


-------------------- sms.lua

freeswitch.consoleLog("info", "chat console\n")

from = '[hidden email]';
to = '[hidden email]';

-- change "to" programmatically

local event = freeswitch.Event("CUSTOM", "SMS::SEND_MESSAGE");
event:addHeader("proto", "sip");
event:addHeader("dest_proto", "sip");
event:addHeader("from", from);
event:addHeader("from_full", from);
event:addHeader("to", to);
event:addHeader("subject", "[hidden email]");
event:addHeader("type", "text/html");
event:addHeader("hint", "the hint");
event:addHeader("replying", "true");
event:addBody("Hello World!");
event:fire();
--freeswitch.consoleLog("info",event:serialize()..'\n');



Может кто-нибудь подсказать, как собственно обработать заголовок TO и FROM, чтобы заменить в нем IP и текст сообщения подставить?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сопоставление адресов
СообщениеДобавлено: 04 июн 2015 12:18 
FreeSWITCH_GuRu

Зарегистрирован: 22 авг 2012 09:52
Сообщения: 1710
не очень с lua дружу
писал когда-то на perl
Код:
#!/usr/bin/perl
use strict;
#use Data::Dumper;
our $message;

#print "\n\n".Dumper(\@_)."\n\n";

#freeswitch::consoleLog("INFO", $message->serialize(). "\n");

my $domain = 'mydomain.org';

my $from_user = $message->getHeader("from_user");
my $to_user = $message->getHeader("to_user");
my $type = $message->getHeader("type");
my $subject = $message->getHeader("subject");

my $body = $message->getBody();

my $api = new freeswitch::API;

# ищем в каком профиле зареган отправитель
my $sofia_contact = $api->executeString("sofia_contact */" . $to_user);
chomp($sofia_contact);

#freeswitch::consoleLog("INFO", $sofia_contact. "\n");
if ($sofia_contact =~ m/^sofia\/(.+)\/sip/) {
    my $sip_profile = $1;

    my $event = new freeswitch::Event("CUSTOM", "SMS::SEND_MESSAGE");
    $event->addHeader("sip_profile", $sip_profile);
    $event->addHeader("dest_proto", "sip");
    $event->addHeader("proto", "sip");
    $event->addHeader("type", $type);
    $event->addHeader("subject", $subject);
    $event->addHeader("from_user", $from_user);
    $event->addHeader("to_user", $to_user);

    my $reg = $api->executeString("sofia status profile " . $sip_profile . " reg " . $to_user);
    #freeswitch::consoleLog("INFO", $reg);

    if ($reg =~ m/User:\s+(.+)\n/m) {
        my $user = $1;
        chomp($user);
        $event->addHeader("to", $user);
    } else {
        $event->addHeader("to", $to_user . "\@" . $domain);
    }

    $event->addHeader("from", $from_user . "\@" . $domain);

    $event->addBody($body);
    #freeswitch::consoleLog("INFO", $event->serialize());
    $event->fire();
} else {
    $message->chat_execute("reply", $message->getBody());
}

return 1;

это пересылка из одного профиля в другой, но висят они на одном IP
нужно просто найти в каком профиле и домене зареган получатель по аналогии с использованием "sofia_contact"

_________________
ЛС: @rostel
Сообщество: @ru_freeswitch


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сопоставление адресов
СообщениеДобавлено: 04 июн 2015 13:13 

Зарегистрирован: 13 май 2015 15:53
Сообщения: 124
я вот такое нашел и поправил

Код:
freeswitch.consoleLog("info", "chat console\n");

  local event = freeswitch.Event("CUSTOM", "SMS::SEND_MESSAGE");
  event:addHeader("proto", "sip");
  event:addHeader("dest_proto", "sip");
  event:addHeader("from", message:getHeader("from"));
  event:addHeader("from_host", '192.168.0.40');
  event:addHeader("from_full", message:getHeader("from_full"));

  event:addHeader("to", to);
  event:addHeader("to_user", message:getHeader("to") );
  event:addHeader("to_host", '192.168.0.40');
  event:addHeader("type", message:getHeader("type"));
 msg = message:getBody()
 if (msg) then
   event:addBody(msg)
 end
-- freeswitch.consoleLog("info", event:serialize());
-- freeswitch.consoleLog("info", message:serialize());

 event:fire();


но в итоге получаю следующую ерунду
Код:
Chatplan: 1001 parsing [public->sms_test] continue=false
Chatplan: 1001@213.227.252.124 Regex (PASS) [sms_test] destination_number() =~ /^(.*)$/ break=on-false
Chatplan: 1001@213.227.252.124 Action lua(lua/sms.lua)
2015-06-04 12:09:37.140815 [INFO] switch_cpp.cpp:1328 chat console
2015-06-04 12:09:37.140815 [ERR] mod_lua.cpp:203 Error in addHeader (arg 3), expected 'char const *' got 'nil'
stack traceback:
[C]: in function 'addHeader'


разве в addheader должен быть третий аргумент? Оо



пы сы разобрался, там ещё переменные объявлять надо


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сопоставление адресов
СообщениеДобавлено: 04 июн 2015 13:36 

Зарегистрирован: 13 май 2015 15:53
Сообщения: 124
Не понимаю... Вот что в итоге родилось

Код:
freeswitch.consoleLog("info", "chat console\n");


local body = message:getBody();
local from =  string.gsub(message:getHeader("from"),"8.8.8.8", "192.168.0.40"  );
local to = string.gsub(message:getHeader("to"),"8.8.8.8", "192.168.0.40"  );


  local event = freeswitch.Event("CUSTOM", "SMS::SEND_MESSAGE");

 
 
  event:addHeader("from", from);
  event:addHeader("from_host", '192.168.0.40');
  event:addHeader("from_full", from);

  event:addHeader("to", to);
  event:addHeader("to_user", to );
  event:addHeader("to_host", '192.168.0.40');
  event:addHeader("type", message:getHeader("type"));
 msg = message:getBody()
 if (msg) then
   event:addBody(msg)
 end

 event:fire();
 
 freeswitch.consoleLog("info", event:serialize());
 --freeswitch.consoleLog("info", message:serialize());



И вроде бы оно этот скрипт жрёт. Но в итоге сообщения не приходят и в логе выходит следующее:

Код:
2015-06-04 12:32:29.280019 [INFO] mod_sms.c:336 Processing text message 1007->1001 in context public
Chatplan: 1001 parsing [public->sms_test] continue=false
Chatplan: 1001@8.8.8.8 Regex (PASS) [sms_test] destination_number() =~ /^(.*)$/ break=on-false
Chatplan: 1001@8.8.8.8 Action lua(lua/sms.lua)
2015-06-04 12:32:29.280019 [INFO] switch_cpp.cpp:1328 chat console
2015-06-04 12:32:29.280019 [INFO] switch_cpp.cpp:1328 'Event-Name: CUSTOM
Core-UUID: 3ebcb2ae-e68a-4725-80cd-d39827f6af04
FreeSWITCH-Hostname: voipsrv
FreeSWITCH-Switchname: voipsrv
FreeSWITCH-IPv4: 192.168.0.40
FreeSWITCH-IPv6: %3A%3A1
Event-Date-Local: 2015-06-04%2012%3A32%3A29
Event-Date-GMT: Thu,%2004%20Jun%202015%2009%3A32%3A29%20GMT
Event-Date-Timestamp: 1433410349280019
Event-Calling-File: switch_cpp.cpp
Event-Calling-Function: Event%3A%3AEvent
Event-Calling-Line-Number: 296
Event-Sequence: 901
Event-Subclass: SMS%3A%3ASEND_MESSAGE
from: 1007%40192.168.0.40
from_host: 192.168.0.40
from_full: 1007%40192.168.0.40
to: 1001%40192.168.0.40
to_user: 1001%40192.168.0.40
to_host: 192.168.0.40
type: text/plain
Content-Length: 6

121212'2015-06-04 12:32:29.280019 [DEBUG] sofia_presence.c:225 Can't find registered user 1001@8.8.8.8



(Где на 8,8,8,8 заменил внешний адрес.) Что ему ещё нужно то, а?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сопоставление адресов
СообщениеДобавлено: 04 июн 2015 14:53 

Зарегистрирован: 13 май 2015 15:53
Сообщения: 124
А может быть есть вариант в чатплане перенаправлять сообщения? Или там только send без параметров?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сопоставление адресов
СообщениеДобавлено: 04 июн 2015 17:08 
FreeSWITCH_GuRu

Зарегистрирован: 22 авг 2012 09:52
Сообщения: 1710
не пробовал с серваками за натом

в чатплане почти ничего нельзя сделать.

_________________
ЛС: @rostel
Сообщество: @ru_freeswitch


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сопоставление адресов
СообщениеДобавлено: 04 июн 2015 17:28 

Зарегистрирован: 13 май 2015 15:53
Сообщения: 124
удалось таки победить, решилось сменой клиентского ПО на то, что позволяет указать отдельно адрес регистратора и домена


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Сопоставление адресов
СообщениеДобавлено: 17 июн 2015 23:30 

Зарегистрирован: 13 май 2015 15:53
Сообщения: 124
прошлый пост - глупость сказал. ПРоблему решил доработанным скриптом
Код:
freeswitch.consoleLog("info", "chat console\n")
  local body = message:getBody();
local from =  string.gsub(message:getHeader("from"),"9.9.9.9", "8.8.8.8"  );
local to = string.gsub(message:getHeader("to"),"9.9.9.9", 8.8.8.8"  );

  freeswitch.consoleLog("info", "chat console\n")
   
   local event = freeswitch.Event("CUSTOM", "SMS::SEND_MESSAGE");
   event:addHeader("proto", "sip");
   event:addHeader("dest_proto", "sip");
   event:addHeader("from", "sip:" .. from);
   event:addHeader("from_full", "sip:" .. from);
   event:addHeader("to", to);
   event:addHeader("subject", "sip:" .. to);
   event:addHeader("type", "text/html");
   event:addHeader("hint", "the hint");
   event:addHeader("replying", "true");
   event:addBody(body);
   
  -- freeswitch.consoleLog("info", event:serialize());
   event:fire();


где 9,9,9,9 - внешний адрес, а 8,8,8,8 внутренний. Пока полет нормальный


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 253


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB