forum.bitel.ru
http://forum.bitel.ru/

Неправильно извлекает IP из таблицы
http://forum.bitel.ru/viewtopic.php?f=22&t=2302
Страница 1 из 1

Автор:  Chaos [ 10 май 2009, 20:50 ]
Заголовок сообщения:  Неправильно извлекает IP из таблицы

Код:
   // Ищем пользователя и IP, привязанный к нему в таблице
      // "radius_pair_ip_x", где "x" код модуля Dialup.
      login = event.getLogin();
      loginid = login.getId();
      print ( "loginid: " + loginid );
      ps = con.prepareStatement( "SELECT ip FROM radius_pair_ip_1 WHERE id=?");
       
      ps.setInt( 1, loginid );
      rs = ps.executeQuery();
 
      login_ip = 0;
      while( rs.next() )
      {
           login_ip = rs.getInt( 1 );
         print ( "login_ip: " + login_ip );
         ipadr = Utils.convertIpToString( login_ip );
          print("ip:" + ipadr);
      }
      

Лог
Код:
05-10/00:41:05  INFO [processor-p-2-t-3] EventProcessor - Process event cid:2; event:Event bitel.billing.server.processor.event.RadiusAuthenticationEvent cid: 2; module: 1; type: 120
05-10/00:41:05  INFO [processor-p-2-t-3] ScriptInstance - Eval script Function [id:2; title:test]
05-10/00:41:05  INFO [processor-p-2-t-3] script - Process time => 171
05-10/00:41:05  INFO [processor-p-2-t-3] script - loginid: 2
login_ip: 2147483647
ip:127.255.255.255

Как видно, LoginId правильный, а цифры, реально записанные в базе и извлеченные оттуда различны. Как решить эту проблему?

Вложения:
IP.jpg
IP.jpg [ 31.53 КБ | Просмотров: 4333 ]
radius_pair_ip.jpg
radius_pair_ip.jpg [ 96.41 КБ | Просмотров: 4344 ]

Автор:  skn [ 11 май 2009, 16:18 ]
Заголовок сообщения: 

замени rs.getInt( 1 ); на rs.getLong( 1 );

для int положительный max = 2147483648

Автор:  Chaos [ 11 май 2009, 18:16 ]
Заголовок сообщения: 

Благодарствую!
Надо бы тогда в WIKI изменить http://wiki.bgbilling.ru/index.php/%D0%9F%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%87%D0%B0_ACCEPT_%D0%B2%D0%BC%D0%B5%D1%81%D1%82%D0%BE_REJECT_%D0%B2%D0%BC%D0%B5%D1%81%D1%82%D0%B5_%D1%81_%D0%B4%D0%BE%D0%BF._%D0%B0%D1%82%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%B0%D0%BC%D0%B8
а то народ будет брать для примера.

Автор:  Amir [ 11 май 2009, 20:35 ]
Заголовок сообщения: 

В wiki правильно, потому что он везде интерпретируется как int.
А в Utils.convertIpToString( login_ip ); он интерпретируется как long, потому слетает...

Автор:  Феанор [ 03 июн 2009, 18:26 ]
Заголовок сообщения: 

Тоже столкнулись с этой проблемой. Решили при поддержке хелпдеска, скрипт в вики уже поправил =)

Автор:  Chaos [ 03 июн 2009, 19:52 ]
Заголовок сообщения: 

Цитата:
скрипт в вики уже поправил =)
Вот это вы зря. Там действительно правильно, я его потом разобрал. Для передачи в качестве радиус-атрибутов нужно его действительно извлекать как Int. Там далее стоит
Код:
 
raIp = new RadiusAttribute( 8 );
raIp.setIntValue((int) login_ip );
А из базы извлечется Long, будет ошибка скрипта. Верните на место.

Автор:  Феанор [ 03 июн 2009, 21:17 ]
Заголовок сообщения: 

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

Автор:  Chaos [ 03 июн 2009, 22:58 ]
Заголовок сообщения: 

Ну хз... Bean Shell позволяет втыкать Long в Int? Я когда попытался извлеченный лонг скормить радиусу какие-то траблы были, точно не помню..Если работает, то можно и рукой махнуть.:)

Автор:  Феанор [ 03 июн 2009, 23:21 ]
Заголовок сообщения: 

Chaos писал(а):
Ну хз... Bean Shell позволяет втыкать Long в Int? Я когда попытался извлеченный лонг скормить радиусу какие-то траблы были, точно не помню..Если работает, то можно и рукой махнуть.:)

raIp.setIntValue( (int)login_ip )

в скобках переменная с добавлением (инт). без этого не работает и ругается на несовместимость формата.

Автор:  Администратор [ 04 июн 2009, 14:34 ]
Заголовок сообщения: 

Цитата:
raIp.setIntValue( (int)login_ip )

в скобках переменная с добавлением (инт). без этого не работает и ругается на несовместимость формата.

Это жесткое приведение типа, при этом бит, отведенный под знак, тоже забивается значащим битом из long. Т.е. int получается отрицательный, но хранящим нужное значение в битах.

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/