index ebd9d1d87552720a3f1206f6d7ad14b4aa56a2b4..4dc52a395c6152a05cd3c8cbc2581831b1ead811 100644 (file)
MSize: LongWord;
MHandled: Boolean = false;
NetMsg: TMsg;
MSize: LongWord;
MHandled: Boolean = false;
NetMsg: TMsg;
+ Err: Boolean;
begin
if not NetMsg.Init(P^.data, P^.dataLength, True) then
Exit;
begin
if not NetMsg.Init(P^.data, P^.dataLength, True) then
Exit;
+ Err := False;
MNext := 0;
MNext := 0;
- while NetMsg.BytesLeft() > 0 do
+ while (NetMsg.BytesLeft() > 0) and (not Err) do
begin
begin
- MSize := NetMsg.ReadLongWord();
- MNext := NetMsg.ReadCount + MSize;
- MHandled := Handler(NetMsg); // TODO: maybe do something with this bool
- NetMsg.Seek(MNext);
+ try
+ MSize := NetMsg.ReadLongWord();
+ MNext := NetMsg.ReadCount + MSize;
+ MHandled := Handler(NetMsg); // TODO: maybe do something with this bool
+ NetMsg.Seek(MNext);
+ except
+ Err := True;
+ end;
end;
MHandled := not MHandled; //k8: stfu, fpc!
enet_packet_destroy(P);
end;
MHandled := not MHandled; //k8: stfu, fpc!
enet_packet_destroy(P);
+ //if Err then begin MC_MalformedPacket(S); Exit; end;
end;
procedure g_Net_Host_HandlePacket(S: pTNetClient; P: pENetPacket; Handler: TNetHostMsgHandler);
end;
procedure g_Net_Host_HandlePacket(S: pTNetClient; P: pENetPacket; Handler: TNetHostMsgHandler);
MSize: LongWord;
MHandled: Boolean = false;
NetMsg: TMsg;
MSize: LongWord;
MHandled: Boolean = false;
NetMsg: TMsg;
+ Err: Boolean;
begin
if not NetMsg.Init(P^.data, P^.dataLength, True) then
Exit;
begin
if not NetMsg.Init(P^.data, P^.dataLength, True) then
Exit;
+ Err := False;
MNext := 0;
MNext := 0;
- while NetMsg.BytesLeft() > 0 do
+ while (NetMsg.BytesLeft() > 0) and (not Err) do
begin
begin
- MSize := NetMsg.ReadLongWord();
- MNext := NetMsg.ReadCount + MSize;
- MHandled := Handler(S, NetMsg); // TODO: maybe do something with this bool
- NetMsg.Seek(MNext);
+ try
+ MSize := NetMsg.ReadLongWord();
+ MNext := NetMsg.ReadCount + MSize;
+ MHandled := Handler(S, NetMsg); // TODO: maybe do something with this bool
+ NetMsg.Seek(MNext);
+ except
+ Err := True;
+ end;
end;
MHandled := not MHandled; //k8: stfu, fpc!
enet_packet_destroy(P);
end;
MHandled := not MHandled; //k8: stfu, fpc!
enet_packet_destroy(P);
+ if Err then begin MH_MalformedPacket(S); Exit; end;
end;
function g_Net_ClientMsgHandler(NetMsg: TMsg): Boolean;
var
MID: Byte;
end;
function g_Net_ClientMsgHandler(NetMsg: TMsg): Boolean;
var
MID: Byte;
+ Err: Boolean;
begin
Result := True;
begin
Result := True;
- MID := NetMsg.ReadByte();
+ Err := False;
+ try
+ MID := NetMsg.ReadByte();
+ except
+ MID := 0;
+ Err := True;
+ end;
+
+ //if Err then begin MC_MalformedPacket(S); Exit; end;
case MID of
NET_MSG_CHAT: MC_RECV_Chat(NetMsg);
case MID of
NET_MSG_CHAT: MC_RECV_Chat(NetMsg);
NET_MSG_GEVENT: MC_RECV_GameEvent(NetMsg);
NET_MSG_FLAG: MC_RECV_FlagEvent(NetMsg);
NET_MSG_GSET: MC_RECV_GameSettings(NetMsg);
NET_MSG_GEVENT: MC_RECV_GameEvent(NetMsg);
NET_MSG_FLAG: MC_RECV_FlagEvent(NetMsg);
NET_MSG_GSET: MC_RECV_GameSettings(NetMsg);
+ NET_MSG_FLAGPOS:MC_RECV_FlagPos(NetMsg);
NET_MSG_PLR: MC_RECV_PlayerCreate(NetMsg);
NET_MSG_PLRPOS: MC_RECV_PlayerPos(NetMsg);
NET_MSG_PLR: MC_RECV_PlayerCreate(NetMsg);
NET_MSG_PLRPOS: MC_RECV_PlayerPos(NetMsg);
NET_MSG_ISPAWN: MC_RECV_ItemSpawn(NetMsg);
NET_MSG_IDEL: MC_RECV_ItemDestroy(NetMsg);
NET_MSG_ISPAWN: MC_RECV_ItemSpawn(NetMsg);
NET_MSG_IDEL: MC_RECV_ItemDestroy(NetMsg);
+ NET_MSG_IPOS: MC_RECV_ItemPos(NetMsg);
NET_MSG_PSTATE: MC_RECV_PanelState(NetMsg);
NET_MSG_PTEX: MC_RECV_PanelTexture(NetMsg);
NET_MSG_PSTATE: MC_RECV_PanelState(NetMsg);
NET_MSG_PTEX: MC_RECV_PanelTexture(NetMsg);
function g_Net_ClientLightMsgHandler(NetMsg: TMsg): Boolean;
var
MID: Byte;
function g_Net_ClientLightMsgHandler(NetMsg: TMsg): Boolean;
var
MID: Byte;
+ Err: Boolean;
begin
Result := True;
begin
Result := True;
- MID := NetMsg.ReadByte();
+ Err := False;
+ try
+ MID := NetMsg.ReadByte();
+ except
+ MID := 0;
+ Err := True;
+ end;
+
+ //if Err then begin MC_MalformedPacket(S); Exit; end;
case MID of
NET_MSG_GEVENT: MC_RECV_GameEvent(NetMsg);
case MID of
NET_MSG_GEVENT: MC_RECV_GameEvent(NetMsg);
function g_Net_HostMsgHandler(S: pTNetClient; NetMsg: TMsg): Boolean;
var
MID: Byte;
function g_Net_HostMsgHandler(S: pTNetClient; NetMsg: TMsg): Boolean;
var
MID: Byte;
+ Err: Boolean;
begin
Result := True;
begin
Result := True;
- MID := NetMsg.ReadByte();
+ Err := False;
+ try
+ MID := NetMsg.ReadByte();
+ except
+ MID := 0;
+ Err := True;
+ end;
+
+ if Err then begin MH_MalformedPacket(S); Exit; end;
case MID of
NET_MSG_INFO: MH_RECV_Info(S, NetMsg);
case MID of
NET_MSG_INFO: MH_RECV_Info(S, NetMsg);