Перейти к содержанию
Авторизация  
WesteroS

First Guard (Rguard) Ошибка

Рекомендуемые сообщения

Ребят, может кто сталкивался с подобной ошибкой, в С++ я никчемный.

Вообщем ситуация - люди входят на сервер, логин сервер проходят нормально при выборе сервера из списка через раз пускает рандомно, если не пускает то окно тупо висеть остается

 

Ошибка (в ГС) :

[12:19:58]  INFO client 127.0.0.1 protected.
[12:19:58]  INFO client HWID18A49018E64C normal
default cr key [b@48b83f10
[12:19:58] ERROR Client: CONNECTED IP: 127.0.0.1 - Failed reading: [C] AuthLogin - Server Version: ${build.revision}
java.nio.BufferUnderflowException
    at java.nio.Buffer.nextGetIndex(Unknown Source)
    at java.nio.HeapByteBuffer.getInt(Unknown Source)
    at westeros.commons.net.nio.ReceivablePacket.readD(ReceivablePacket.java
:32)
    at westeros.gameserver.network.l2.c2s.AuthLogin.readImpl(AuthLogin.java:
32)
    at westeros.gameserver.network.l2.c2s.L2GameClientPacket.read(L2GameClie
ntPacket.java:26)
    at westeros.commons.net.nio.impl.SelectorThread.parseClientPacket(Select
orThread.java:410)
    at westeros.commons.net.nio.impl.SelectorThread.tryReadPacket2(SelectorT
hread.java:354)
    at westeros.commons.net.nio.impl.SelectorThread.readPacket(SelectorThrea
d.java:309)
    at westeros.commons.net.nio.impl.SelectorThread.run(SelectorThread.java:
182)

 

Состав AuthLogin.readImpl:

private int _sessionId;
private int _data1;
private int _data2;
private int _data3;
private int _data4;
@Override
protected void readImpl()
{
 _sessionId = readD();
 _data1 = readD();
 _data2 = readD();
 _data3 = readD();
 _data4 = readD(); //(32 строка)
}

 

после часа работы вообще практически пускать перестает, 15 раз не пускает, 1 раз пускает, а может и вообще не пустить

 

Вообще где копать подскажите, может кто сталкивался

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а причем тут C++? ошибка явно в серверной части - ява

ставь вот эту и не парься

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в смысле не парься? мне только защита нужна, не больше

здесь ошибка - мусор от клиента, если кто сталкивался может помогут

Изменено пользователем WesteroS

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Полный код AuthLogin в студию.

 

_data4 = readD(); //(32 строка)

 

для считывания строк у нас readS

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
package westeros.gameserver.network.l2.c2s;
import westeros.gameserver.Shutdown;
import westeros.gameserver.network.authcomm.AuthServerCommunication;
import westeros.gameserver.network.authcomm.SessionKey;
import westeros.gameserver.network.authcomm.gspackets.PlayerAuthRequest;
import westeros.gameserver.network.l2.GameClient;
import westeros.gameserver.network.l2.s2c.LoginFail;
import westeros.gameserver.network.l2.s2c.ServerClose;
/**
* cSddddd
* cSdddddQ
* loginName + keys must match what the loginserver used.
*/
public class AuthLogin extends L2GameClientPacket
{
private String _loginName;
private int _playKey1;
private int _playKey2;
private int _loginKey1;
private int _loginKey2;
private byte[] _data = new byte[48];
@Override
protected void readImpl()
{
 _loginName = readS(32).toLowerCase();
 _playKey2 = readD();
 _playKey1 = readD();
 _loginKey1 = readD();
 _loginKey2 = readD();
}
@Override
protected void runImpl()
{
 GameClient client = getClient();

 SessionKey key = new SessionKey(_loginKey1, _loginKey2, _playKey1, _playKey2);
 client.setSessionId(key);
 client.setLoginName(_loginName);

 if(Shutdown.getInstance().getMode() != Shutdown.NONE && Shutdown.getInstance().getSeconds() <= 15)
  client.closeNow(false);
 else
 {  
  if(AuthServerCommunication.getInstance().isShutdown())
  {
   client.close(new LoginFail(LoginFail.SYSTEM_ERROR_LOGIN_LATER));
   return;
  }

  GameClient oldClient = AuthServerCommunication.getInstance().addWaitingClient(client);
  if(oldClient != null)
   oldClient.close(ServerClose.STATIC);

  AuthServerCommunication.getInstance().sendPacket(new PlayerAuthRequest(client));
 }
}
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вообще суть проблемы в том, что он пытается прочитать из буффера 4 байта под int но достигает лимита буффера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тут надо уже дебагером смотреть

З.Ы. Это в каких хрониках логин 32 символа? всегда 16 был вроде.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Иногда вот так бывает, при логине попытке неудачной:

[13:57:40]  INFO client 127.0.0.1 protected.
[13:57:40]  INFO client HWID18A49018E64C normal
default cr key [b@3f543e84[13:57:40]  INFO |    xxxфФ▒тЯ╜ьйЮшЩв>x	  |	   1
8A49018E64C	   |	 127.0.0.1    |    2	 |

 

удачная попытка:

[13:57:34]  INFO client 127.0.0.1 protected.
[13:57:34]  INFO client HWID18A49018E64C normal
default cr key [b@3bcd45d9[13:57:34]  INFO |    xxx123xxx	  |	   18A49018E
64C	   |	 127.0.0.1    |    2	 |

 

32 потому что шифрация

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

то есть лонг попробовать вместо инт что ли? не пойму

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

то есть лонг попробовать вместо инт что ли? не пойму

 

Ничего не поменяется, long так же 4 байта.

Там надо смотреть начинку буффера дебагером.

 

З.Ы.

private byte[] _data = new byte[48];

 

У тебя при каждом создании нового объекта класса создается неиспользуемый объект весом 48 байт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

и отсюда возможно переполнение буфера, сейчас попробую, отпишусь

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

и отсюда возможно переполнение буфера, сейчас попробую, отпишусь

 

это тут не при чем, с буффера считываются данные лишь в рабочие переменные.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ладно, есть идеи, или может какие другие фалы выложить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

что в дебаг прописать, какие параметры?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

что в дебаг прописать, какие параметры?

 

Я бы использовал remote debug из IDEA. Там все просто как два пальца.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

есть ссылка на мануал?

 

IDEA стоит у тебя? Могу по teamviewer показать основы

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...