Аутентификация с учетом 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);
  }
}
Личные инструменты