mirror of
https://github.com/EQEmu/Server.git
synced 2026-04-05 15:22:37 +00:00
Fix for crash when sending too large a response packet, less efficient but should handle every packet type now. Can retool if allocations end up being a problem.
This commit is contained in:
parent
06f7f6b483
commit
f4621bd5c0
@ -97,16 +97,13 @@ int callback_eqemu(libwebsocket_context *context, libwebsocket *wsi, libwebsocke
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case LWS_CALLBACK_SERVER_WRITEABLE: {
|
case LWS_CALLBACK_SERVER_WRITEABLE: {
|
||||||
//send messages here
|
std::vector<char> out_message;
|
||||||
char out_message[MAX_MESSAGE_LENGTH + LWS_SEND_BUFFER_PRE_PADDING + LWS_SEND_BUFFER_POST_PADDING + 1];
|
|
||||||
for (auto iter = session->send_queue->begin(); iter != session->send_queue->end(); ++iter) {
|
for (auto iter = session->send_queue->begin(); iter != session->send_queue->end(); ++iter) {
|
||||||
|
out_message.resize((*iter).size() + LWS_SEND_BUFFER_PRE_PADDING + LWS_SEND_BUFFER_POST_PADDING + 1);
|
||||||
//out_message
|
memset(&out_message[0], 0, (*iter).size() + LWS_SEND_BUFFER_PRE_PADDING + LWS_SEND_BUFFER_POST_PADDING + 1);
|
||||||
memset(out_message, 0, MAX_MESSAGE_LENGTH + LWS_SEND_BUFFER_PRE_PADDING + LWS_SEND_BUFFER_POST_PADDING + 1);
|
|
||||||
memcpy(&out_message[LWS_SEND_BUFFER_PRE_PADDING], &(*iter)[0], (*iter).size());
|
memcpy(&out_message[LWS_SEND_BUFFER_PRE_PADDING], &(*iter)[0], (*iter).size());
|
||||||
auto n = libwebsocket_write(wsi, (unsigned char*)&out_message[LWS_SEND_BUFFER_PRE_PADDING], (*iter).size(), LWS_WRITE_TEXT);
|
int n = libwebsocket_write(wsi, (unsigned char*)&out_message[LWS_SEND_BUFFER_PRE_PADDING], (*iter).size(), LWS_WRITE_TEXT);
|
||||||
if (n < (*iter).size()) {
|
if(n < (*iter).size()) {
|
||||||
//couldn't write the message
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -39,8 +39,6 @@
|
|||||||
#include <list>
|
#include <list>
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
#define MAX_MESSAGE_LENGTH 2048
|
|
||||||
|
|
||||||
struct per_session_data_eqemu {
|
struct per_session_data_eqemu {
|
||||||
std::string auth;
|
std::string auth;
|
||||||
std::string uuid;
|
std::string uuid;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user