Аутентификация с учетом Calling-Id-Station
Материал из BiTel WiKi
Версия биллинга 5.0. Обрабатывается событие RADIUS-аунтификации.
Необходимо сделать так, чтобы в модуле Dial-Up у абонента при первом дозвоне фиксировалось значение атрибута Calling-Id-Station (будь то номер телефона, MAC-адрес или IP-адрес) и при последующих дозвонах доступ разрешался только с этого адреса/телефона. Сброс ограничения осуществляется по звонку в ТП.
import bitel.billing.server.dialup.bean.DialUpLoginManager; import bitel.billing.server.dialup.bean.DialUpLogin; import bitel.billing.server.radius.RadiusStandartAttributes; import java.util.List; private CheckLoginLimit(DialUpLogin login, mid) { // Проверяет, существуют ли у данного логина ограничения с типом 5 (На Calling-Station-Id). query = "SELECT COUNT(*) FROM user_login_limit_"+mid+" WHERE type_con=5 AND lid="+login.getId(); ps = con.prepareStatement(query); rs = ps.executeQuery(); return rs.next() && rs.getInt(1) > 0; } private AddLoginLimit(int mid, DialUpLogin login, String csi) { // Добавляет в список ограничений два. Первое - разрешает заходить с нужного Calling-Station-Id (параметр csi), второе - запрещает выходить с любых других IP/MAC/телефонов lm = new DialUpLoginManager(con, mid); // Пустой массив временных масок, null вызывает Null Pointer Exception List cond = new ArrayList(); lm.updateLimitService(login.getId(), "0", 5, "0", csi, null, null, "", 1, cond); lm.updateLimitService(login.getId(), "0", 5, "1", "*", null, null, "", 0, cond); } mid = 1; login = event.getLogin(); request = event.getRequest(); csi = request.getStringAttribute(RadiusStandartAttributes.Calling_Station_Id); if (null == csi) { print ("Not found MAC address in the ACCOUNTING-REQUEST."); } else { if (! CheckLoginLimit(login, mid)) { AddLoginLimit(mid, login, csi); } }