forum.bitel.ru http://forum.bitel.ru/ |
|
Соединять при отрицательном балансе. http://forum.bitel.ru/viewtopic.php?f=5&t=2295 |
Страница 1 из 1 |
Автор: | iros [ 07 май 2009, 19:40 ] |
Заголовок сообщения: | Соединять при отрицательном балансе. |
Необходимо научить модуль соеденять при отрицательном балансе дебитовые договора. Попробовал скипт из вики - дает ошибку: Цитата: EXCEPTIONS:
Sourced file: Function [id:1; title:rad-auth] : Method Invocation ps.setIntSourced file: Function [id:1; title:rad-auth] : Method Invocation ps.setInt : at Line: 14 : in file: Function [id:1; title:rad-auth] : ps .setInt ( 1 , login .getId ( ) ) Target exception: java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0). А нельзя как нить попроще ? Вроде простая задача. |
Автор: | Victor [ 08 май 2009, 10:32 ] |
Заголовок сообщения: | |
Во-первых, соединять Вам нужно для чего? Если обсчитывать, то не выйдет, т.к. сессии в биллинге не будет. Если просто проинформировать абонента, то выйдет. Во-вторых, что за скрипт и куда вы его прикручиваете? |
Автор: | iros [ 08 май 2009, 12:05 ] |
Заголовок сообщения: | |
Соединять нужно, что б пустить абонента на сайт оператора и личный кабинет. Считать ненужно. Скрипт из вики: http://wiki.bgbilling.ru/index.php/Передача_ACCEPT_вместо_REJECT_вместе_с_доп._аттрибутами С приведенной ошибкой скрипта уже разобрался. Но скрипт все равно не авторизует. Срабатывает это условие. Цитата: // Если логину не присвоен IP-адрес, то даем AUTH_REJECT.
if( login_ip == 0 ) { errCode = 2; response = event.getResponse(); response.setPacketType( RadiusPacket.AUTHENTICATION_REJECT ); } Я не совсем понимаю, при чем тут адрес. Можно пояснить. ? Я проверил, без скрипта - авторизует. Если прикрутить скрипт к событию RADIUS-авторизация и добавить в договор. - срабатывает условие приведеное выше. |
Автор: | snark [ 08 май 2009, 12:20 ] |
Заголовок сообщения: | |
попробуйте такой вариант: Код: import bitel.billing.server.radius.*; точно должен пустить import bitel.billing.server.script.event.*; import java.util.*; errorCode = event.getErrorCode(); response = event.getResponse(); if (errorCode == 4 || errorCode == 33) { response.setPacketType(RadiusPacket.AUTHENTICATION_ACCEPT); // Service-Type = 2 rad_attrib_1 = new RadiusAttribute(6); rad_attrib_1.setIntValue(2); // Framed-Protocol = 1 rad_attrib_2 = new RadiusAttribute(7); rad_attrib_2.setIntValue(1); // Session-Timeout = 300 rad_attrib_3 = new RadiusAttribute(27); rad_attrib_3.setIntValue(300); response.addAttribute(rad_attrib_1); response.addAttribute(rad_attrib_2); response.addAttribute(rad_attrib_3); print("\nБаланс отрицательный.\nЛогин '" + login + "' подключился, но доступна только статистика."); } ![]() |
Автор: | iros [ 08 май 2009, 13:35 ] |
Заголовок сообщения: | |
Ага. Работатет. ![]() Но адрес из пула не назначает... ![]() Как быть ? |
Автор: | Victor [ 08 май 2009, 14:04 ] |
Заголовок сообщения: | |
Переписать скрипт и назначать адреса из другого диапазона... |
Автор: | snark [ 08 май 2009, 15:41 ] |
Заголовок сообщения: | |
Victor писал(а): Переписать скрипт и назначать адреса из другого диапазона... +1iros писал(а): Как быть ? тут все конечно же де-факто знают какое оборудование Вы используете, как ему сообщить что адреса надо брать из пула созданного на этом оборудовании и имя этого пула да?
|
Автор: | skn [ 08 май 2009, 17:21 ] |
Заголовок сообщения: | |
может вообще настроить так что бы на статистику пускала без VPN... ![]() |
Автор: | iros [ 12 май 2009, 13:08 ] |
Заголовок сообщения: | |
>может вообще настроить так что бы на статистику пускала без VPN... У меня "тотальный" PPPoE. iros писал(а): Как быть ? тут все конечно же де-факто знают какое оборудование Вы используете?[/quote]Извиняюсь, но я был уверен, что радиус сам все это решит. Linux ppp-2.4.4b1 rp-pppoe-3.10 iros писал(а): как ему сообщить что адреса надо брать из пула созданного на этом оборудовании и имя этого пула да?
Вы намекаете на FramedPool ? Незнаком с этой методикой. Буду признателен за ссылки или примеры. |
Автор: | iros [ 22 май 2009, 18:18 ] |
Заголовок сообщения: | |
Если я опишу в модуле пул адресов Например: pools.pool_1=192.168.168.1-192.168.168.254 Какие классы/методы я могу использовать,что бы самому выбирать из этого пула адреса в скрипте? |
Автор: | neo100 [ 22 май 2009, 21:57 ] |
Заголовок сообщения: | |
snark писал(а): попробуйте такой вариант:
Код: import bitel.billing.server.radius.*; точно должен пустить import bitel.billing.server.script.event.*; import java.util.*; errorCode = event.getErrorCode(); response = event.getResponse(); if (errorCode == 4 || errorCode == 33) { response.setPacketType(RadiusPacket.AUTHENTICATION_ACCEPT); // Service-Type = 2 rad_attrib_1 = new RadiusAttribute(6); rad_attrib_1.setIntValue(2); // Framed-Protocol = 1 rad_attrib_2 = new RadiusAttribute(7); rad_attrib_2.setIntValue(1); // Session-Timeout = 300 rad_attrib_3 = new RadiusAttribute(27); rad_attrib_3.setIntValue(300); response.addAttribute(rad_attrib_1); response.addAttribute(rad_attrib_2); response.addAttribute(rad_attrib_3); print("\nБаланс отрицательный.\nЛогин '" + login + "' подключился, но доступна только статистика."); } ![]() У меня аналогичная проблема (час назад завел отдельную тему, но видать поторопился) - хотелось бы все-таки понять почему адрес пустой? (подробности тут - http://www.bgbilling.ru/forum/viewtopic.php?t=2339) Cкрипт же из вики - если это не баг а фича - надо бы вики поправить... |
Автор: | iros [ 22 май 2009, 22:20 ] |
Заголовок сообщения: | |
Если абонент признан должником - сессия в биллинге не появится. IP выдан не будет. Со всеми вытекающими. С этим можно спорить, но это так. Скрипт заменяет ответ радиуса и как я понимаю должен сам решать какой IP выдать абоненту. Framed-Pool - не канает. pppd не умеет с этим работать. У радиусклиента такого атрибута вообще нет. Лично я бы предпочел выдывать IP из своего пула, описаного в модуле. Но похоже и это не пройдет. Как быть - непонятно. Разработчики выхода не предлогают. Для них устанавливать соединение если "в минусе" - это дикость. Считаю, что такие сесии надо заносить в базу и обрабатывать отдельно. |
Автор: | skn [ 23 май 2009, 01:43 ] |
Заголовок сообщения: | |
а вариант когда радиус возвращает accept, но не возвращает Framed-IP или Framed-Pool и IP назначается pppd не прокатит...? Код: /etc/pptpd.conf
# Локальный IP-адрес сервера PPTP localip 192.168.0.1 # Пул адресов, которые сервер выдаёт клиентам # Эти адреса не должны использоваться в локальной сети remoteip 192.168.0.10-20 |
Автор: | snark [ 25 май 2009, 12:22 ] |
Заголовок сообщения: | |
iros писал(а): Лично я бы предпочел выдывать IP из своего пула, описаного в модуле.
вроде как тут, на форуме, проскакивало как использовать пулы в скриптах, но с наскоку я не нашел и ссылку дать не могу ... поищите, думаю найдете |
Автор: | neo100 [ 25 май 2009, 15:04 ] |
Заголовок сообщения: | |
насчет пулов... я делаю так: ra4 = new RadiusAttribute(88); ra4.setStringValue("bitel"); resp.addAttribute(ra4); перегружаю радиус, соединяюсь: Type=AUTHENTICATION_REQUEST Attributes: User-Name=mylogin NAS-Identifier=R2 NAS-Port-Id=0/0/0/23 User-Password=12345 NAS-IP-Address=10.0.0.2 NAS-Port=324227 Service-Type=2 Framed-Protocol=1 Calling-Station-Id=00c0.262d.83bd NAS-Port-Type=15 cisco-avpair=client-mac-address=00c0.262d.83bd INFO 25.05.2009 13:57:24 RESPONSE: Type=AUTHENTICATION_ACCEPT Process time:311 Attributes: Reply-Message=4 Service-Type=2 Framed-Protocol=1 Session-Timeout=300 Framed-Pool=bitel INFO 25.05.2009 13:57:24 RESPONSE: Type=AUTHENTICATION_ACCEPT Process time:343 Attributes: Reply-Message=4 Service-Type=2 Framed-Protocol=1 Session-Timeout=300 Framed-Pool=bitel при этом на cisco: ip local pool bitel 192.168.134.1 192.168.134.100 Но при соединении получаю ошибку 738: The server did not assign an address В чем же дело? |
Автор: | snark [ 25 май 2009, 15:28 ] |
Заголовок сообщения: | |
neo100 писал(а): насчет пулов... я делаю так:
ra4 = new RadiusAttribute(88); ra4.setStringValue("bitel"); resp.addAttribute(ra4); перегружаю радиус, соединяюсь ... при этом на cisco: ip local pool bitel 192.168.134.1 192.168.134.100 Но при соединении получаю ошибку 738: The server did not assign an address В чем же дело? сделайте так: Код: response = event.getResponse();
response.setPacketType(RadiusPacket.AUTHENTICATION_ACCEPT); ra4 = new RadiusVendorAttribute(9, 1); ra4.setStringValue("ip:addr-pool=bitel"); response.addVendorAttribute(ra4); |
Автор: | neo100 [ 25 май 2009, 15:55 ] |
Заголовок сообщения: | |
Не так не получится... У меня "ip:..." для проприетарного 9,1 атрибута почему-то попадает в username ![]() http://www.bgbilling.ru/forum/viewtopic.php?t=2348 Как получится решить эту проблему - обязательно попробую |
Автор: | Fate [ 06 июн 2009, 13:28 ] |
Заголовок сообщения: | |
Как результат?.. |
Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |