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:
KimLS 2014-10-11 15:44:27 -07:00
parent 06f7f6b483
commit f4621bd5c0
2 changed files with 5 additions and 10 deletions

View File

@ -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;
} }
} }

View File

@ -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;