DWORD STDCALL mouseNewStatsPageTwoLeftUp(sWinMessage* msg) { if (!D2isLODGame()) return -1; DWORD x = D2GetMouseX(); DWORD y = D2GetMouseY(); if (!isOnStatsPage(x,y)) return 1; if (isOnCloseBtn(x,y)) { log_msg("push up left button close\n"); if (isDownBtn.close) D2TogglePage(2,1,0); } else if (isOnPreviousPageBtn(x,y)) { log_msg("push up left button previous page\n"); if (isDownBtn.previousPage) GoPreviousStatPage(); } else if (isOnNextPageBtn(x,y)) { log_msg("push up left button next page\n"); if (isDownBtn.nextPage) GoNextStatPage(); } D2CleanStatMouseUp(); freeMessage(msg); isDownBtn.all=0; return 0; }
DWORD STDCALL mouseRunewordsPageLeftDown(sWinMessage* msg) { if (!D2isLODGame() || !D2GetResolution()) return -1; if (!isOnStatsPage(msg->x,msg->y)) return 1; if (isOnCloseBtn(msg->x,msg->y)) { log_msg("push down left button close\n"); isDownBtn.close = 1; D2PlaySound(4,0,0,0,0); } else if (isOnNextPageBtn(msg->x,msg->y)) { log_msg("push down left button next page\n"); isDownBtn.nextPage = 1; D2PlaySound(4,0,0,0,0); } else if (isOnPrevRunesBtn(msg->x,msg->y)) { log_msg("push down left button prev page\n"); isDownBtn.prevRunes = 1; D2PlaySound(4,0,0,0,0); } else if (isOnNextRunesBtn(msg->x,msg->y)) { log_msg("push down left button next runes\n"); isDownBtn.nextRunes = 1; D2PlaySound(4,0,0,0,0); } freeMessage(msg); return 0; }
/* Send RTSP SETUP request */ static int setupStream(PRTSP_MESSAGE response, char* target) { RTSP_MESSAGE request; int ret; ret = initializeRtspRequest(&request, "SETUP", target); if (ret != 0) { if (hasSessionId) { if (!addOption(&request, "Session", sessionIdString)) { ret = 0; goto FreeMessage; } } if (addOption(&request, "Transport", " ") && addOption(&request, "If-Modified-Since", "Thu, 01 Jan 1970 00:00:00 GMT")) { ret = transactRtspMessage(&request, response); } else { ret = 0; } FreeMessage: freeMessage(&request); } return ret; }
DWORD STDCALL mouseNewStatsPageTwoLeftDown(sWinMessage* msg) { if (!D2isLODGame()) return -1; DWORD x = D2GetMouseX(); DWORD y = D2GetMouseY(); if (!isOnStatsPage(x,y)) return 1; if (isOnCloseBtn(x,y)) { log_msg("push down left button close\n"); isDownBtn.close = 1; D2PlaySound(4,0,0,0,0); } else if (isOnPreviousPageBtn(x,y)) { log_msg("push down left button previous page\n"); isDownBtn.previousPage = 1; D2PlaySound(4,0,0,0,0); } else if (isOnNextPageBtn(x,y)) { log_msg("push down left button next page\n"); isDownBtn.nextPage = 1; D2PlaySound(4,0,0,0,0); } freeMessage(msg); return 0; }
/* Send RTSP OPTIONS request */ static int requestOptions(PRTSP_MESSAGE response) { RTSP_MESSAGE request; int ret; ret = initializeRtspRequest(&request, "OPTIONS", rtspTargetUrl); if (ret != 0) { ret = transactRtspMessage(&request, response); freeMessage(&request); } return ret; }
Unit* STDCALL skillsPageMouseDown(sWinMessage* msg) { Unit* ptChar = D2GetClientPlayer(); if ( active_SkillsPoints && !onRealm && D2isLODGame() && isOnButtonUnassignSkill(D2GetMouseX(),D2GetMouseY())) { log_msg("push down left button unassign skill\n"); btnSkillIsDown = 1; D2PlaySound(4,0,0,0,0); freeMessage(msg); return NULL; } return ptChar; }
/*====================================================================*/ int freeCommarea(DFHEIBLK *inDfheiptr, TraceParms* inTraceParms, CICSProgramDesc* pProgramDesc, Message* pRequestMessage, Message* pResponseMessage) { int rc = OK_CODE; dfheiptr = inDfheiptr; g_pTraceParms = inTraceParms; initLog(dfheiptr, inTraceParms); if (g_pTraceParms->traceMode == TRUE_CODE) { traceMessage(MODULE_NAME, "Entered freeCommarea"); } rc = freeMessage(pRequestMessage); rc = freeMessage(pResponseMessage); if (g_pTraceParms->traceMode == TRUE_CODE) { traceMessage(MODULE_NAME, "Return from freeCommarea"); } return rc; }
/* Send RTSP PLAY request*/ static int playStream(PRTSP_MESSAGE response, char* target) { RTSP_MESSAGE request; int ret; ret = initializeRtspRequest(&request, "PLAY", target); if (ret != 0) { if (addOption(&request, "Session", sessionIdString)) { ret = transactRtspMessage(&request, response); } else { ret = 0; } freeMessage(&request); } return ret; }
DWORD STDCALL mouseRunewordsPageLeftUp(sWinMessage* msg) { if (!D2isLODGame() || !D2GetResolution()) return -1; if (!isOnStatsPage(msg->x,msg->y)) return 1; if (isOnCloseBtn(msg->x,msg->y)) { log_msg("push up left button close\n"); if (isDownBtn.close) D2TogglePage(2,1,0); } else if (isOnNextPageBtn(msg->x,msg->y)) { log_msg("push up left button next page\n"); if (isDownBtn.nextPage) { GoStatPage(GetCurrentPage()+1); log_msg("next page press\n"); } } else if (isOnPrevRunesBtn(msg->x,msg->y)) { log_msg("push up left button prev runes\n"); if (isDownBtn.prevRunes) { if (curRunesPage) curRunesPage--; } } else if (isOnNextRunesBtn(msg->x,msg->y)) { log_msg("push up left button next runes\n"); if (isDownBtn.nextRunes) { if (curRunesPage < maxRunesPage) curRunesPage++; } } D2CleanStatMouseUp(); freeMessage(msg); isDownBtn.all=0; return 0; }
/* Create an RTSP Request */ static int initializeRtspRequest(PRTSP_MESSAGE msg, char* command, char* target) { char sequenceNumberStr[16]; char clientVersionStr[16]; // FIXME: Hacked CSeq attribute due to RTSP parser bug createRtspRequest(msg, NULL, 0, command, target, "RTSP/1.0", 0, NULL, NULL, 0); sprintf(sequenceNumberStr, "%d", currentSeqNumber++); sprintf(clientVersionStr, "%d", rtspClientVersion); if (!addOption(msg, "CSeq", sequenceNumberStr) || !addOption(msg, "X-GS-ClientVersion", clientVersionStr)) { freeMessage(msg); return 0; } return 1; }
/* Send RTSP DESCRIBE request */ static int requestDescribe(PRTSP_MESSAGE response) { RTSP_MESSAGE request; int ret; ret = initializeRtspRequest(&request, "DESCRIBE", rtspTargetUrl); if (ret != 0) { if (addOption(&request, "Accept", "application/sdp") && addOption(&request, "If-Modified-Since", "Thu, 01 Jan 1970 00:00:00 GMT")) { ret = transactRtspMessage(&request, response); } else { ret = 0; } freeMessage(&request); } return ret; }
/* Send RTSP ANNOUNCE message */ static int sendVideoAnnounce(PRTSP_MESSAGE response, PSTREAM_CONFIGURATION streamConfig) { RTSP_MESSAGE request; int ret; int payloadLength; char payloadLengthStr[16]; struct in_addr sdpAddr; ret = initializeRtspRequest(&request, "ANNOUNCE", "streamid=video"); if (ret != 0) { ret = 0; if (!addOption(&request, "Session", sessionIdString) || !addOption(&request, "Content-type", "application/sdp")) { goto FreeMessage; } memcpy(&sdpAddr, &remoteAddr, sizeof(remoteAddr)); request.payload = getSdpPayloadForStreamConfig(streamConfig, sdpAddr, rtspClientVersion, &payloadLength); if (request.payload == NULL) { goto FreeMessage; } request.flags |= FLAG_ALLOCATED_PAYLOAD; request.payloadLength = payloadLength; sprintf(payloadLengthStr, "%d", payloadLength); if (!addOption(&request, "Content-length", payloadLengthStr)) { goto FreeMessage; } ret = transactRtspMessage(&request, response); FreeMessage: freeMessage(&request); } return ret; }
DWORD STDCALL manageBtnDown(sWinMessage* msg) { if (onRealm || !D2isLODGame()) return 0; if (isOnButtonPreviousStash(msg->x,msg->y)) isDownBtn.previous = 1; else if (isOnButtonNextStash(msg->x,msg->y)) isDownBtn.next = 1; else if (active_sharedStash && isOnButtonToggleSharedStash(msg->x,msg->y)) isDownBtn.toggleToSharedStash = 1; else if (isOnButtonPreviousIndexStash(msg->x,msg->y)) isDownBtn.previousIndex = 1; else if (isOnButtonNextIndexStash(msg->x,msg->y)) isDownBtn.nextIndex = 1; else if (active_sharedGold && isOnButtonPutGold(msg->x,msg->y)) isDownBtn.putGold = 1; else if (active_sharedGold && isOnButtonTakeGold(msg->x,msg->y)) isDownBtn.takeGold = 1; else return 0; D2PlaySound(4,0,0,0,0); freeMessage(msg); return 1; }
int poll_reader() { LLRP_tSMessage *pMessage = NULL; const LLRP_tSTypeDescriptor *pType; // wait a little bit for a message // // FIXME: it'd be nice if the LLRP library exposed a file descriptor so // we could roll it into select in our main loop pMessage = recvMessage(RECEIVE_TIMEOUT); if (pMessage == NULL) { // timeout return 1; } /* * What happens here depends on what kind of message was received. * Use the type label (pType) to discriminate message types. */ pType = pMessage->elementHdr.pType; /* * If this is a tag report, then process it. */ if (&LLRP_tdRO_ACCESS_REPORT == pType) { if (loss_timeout != UINT_MAX) { process_ro_access_report_with_loss_timeout((LLRP_tSRO_ACCESS_REPORT *)pMessage); } else { process_ro_access_report((LLRP_tSRO_ACCESS_REPORT *)pMessage); } freeMessage(pMessage); scans_left_to_do --; if (scans_left_to_do > 0) startROSpec(); return 1; } /* * If this is a reader event ... */ else if (&LLRP_tdREADER_EVENT_NOTIFICATION == pType) { LLRP_tSREADER_EVENT_NOTIFICATION *pNtf; LLRP_tSReaderEventNotificationData *pNtfData; pNtf = (LLRP_tSREADER_EVENT_NOTIFICATION *) pMessage; pNtfData = LLRP_READER_EVENT_NOTIFICATION_getReaderEventNotificationData(pNtf); if (pNtfData != NULL) { handleReaderEventNotification(pNtfData); } else { // Should never happen. g_warning("READER_EVENT_NOTIFICATION without data"); } } else { /* * Something unexpected happened. */ g_warning("Ignoring unexpected message during monitor: %s", pType->pName); } freeMessage(pMessage); return 1; }
/* Perform RTSP Handshake with the streaming server machine as part of the connection process */ int performRtspHandshake(IP_ADDRESS addr, PSTREAM_CONFIGURATION streamConfigPtr) { struct in_addr inaddr; // Initialize global state remoteAddr = addr; memcpy(&inaddr, &addr, sizeof(addr)); sprintf(rtspTargetUrl, "rtsp://%s", inet_ntoa(inaddr)); currentSeqNumber = 1; hasSessionId = 0; if (serverMajorVersion == 3) { rtspClientVersion = 10; } else { rtspClientVersion = 11; } { RTSP_MESSAGE response; if (!requestOptions(&response)) { Limelog("RTSP OPTIONS request failed\n"); return -1; } if (response.message.response.statusCode != 200) { Limelog("RTSP OPTIONS request failed: %d\n", response.message.response.statusCode); return -1; } freeMessage(&response); } { RTSP_MESSAGE response; if (!requestDescribe(&response)) { Limelog("RTSP DESCRIBE request failed\n"); return -1; } if (response.message.response.statusCode != 200) { Limelog("RTSP DESCRIBE request failed: %d\n", response.message.response.statusCode); return -1; } freeMessage(&response); } { RTSP_MESSAGE response; char* sessionId; if (!setupStream(&response, "streamid=audio")) { Limelog("RTSP SETUP streamid=audio request failed\n"); return -1; } if (response.message.response.statusCode != 200) { Limelog("RTSP SETUP streamid=audio request failed: %d\n", response.message.response.statusCode); return -1; } sessionId = getOptionContent(response.options, "Session"); if (sessionId == NULL) { Limelog("RTSP SETUP streamid=audio is missing session attribute"); return -1; } strcpy(sessionIdString, sessionId); hasSessionId = 1; freeMessage(&response); } { RTSP_MESSAGE response; if (!setupStream(&response, "streamid=video")) { Limelog("RTSP SETUP streamid=video request failed\n"); return -1; } if (response.message.response.statusCode != 200) { Limelog("RTSP SETUP streamid=video request failed: %d\n", response.message.response.statusCode); return -1; } freeMessage(&response); } { RTSP_MESSAGE response; if (!sendVideoAnnounce(&response, streamConfigPtr)) { Limelog("RTSP ANNOUNCE request failed\n"); return -1; } if (response.message.response.statusCode != 200) { Limelog("RTSP ANNOUNCE request failed: %d\n", response.message.response.statusCode); return -1; } freeMessage(&response); } { RTSP_MESSAGE response; if (!playStream(&response, "streamid=video")) { Limelog("RTSP PLAY streamid=video request failed\n"); return -1; } if (response.message.response.statusCode != 200) { Limelog("RTSP PLAY streamid=video failed: %d\n", response.message.response.statusCode); return -1; } freeMessage(&response); } { RTSP_MESSAGE response; if (!playStream(&response, "streamid=audio")) { Limelog("RTSP PLAY streamid=audio request failed\n"); return -1; } if (response.message.response.statusCode != 200) { Limelog("RTSP PLAY streamid=audio failed: %d\n", response.message.response.statusCode); return -1; } freeMessage(&response); } return 0; }
bool HTTPSocket<isServer>::upgrade(const char *secKey, const char *extensions, size_t extensionsLength, const char *subprotocol, size_t subprotocolLength) { if (isServer) { unsigned char shaInput[] = "XXXXXXXXXXXXXXXXXXXXXXXX258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; memcpy(shaInput, secKey, 24); unsigned char shaDigest[SHA_DIGEST_LENGTH]; SHA1(shaInput, sizeof(shaInput) - 1, shaDigest); char upgradeBuffer[1024]; memcpy(upgradeBuffer, "HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: ", 97); base64(shaDigest, upgradeBuffer + 97); memcpy(upgradeBuffer + 125, "\r\n", 2); size_t upgradeResponseLength = 127; if (extensionsLength) { memcpy(upgradeBuffer + upgradeResponseLength, "Sec-WebSocket-Extensions: ", 26); memcpy(upgradeBuffer + upgradeResponseLength + 26, extensions, extensionsLength); memcpy(upgradeBuffer + upgradeResponseLength + 26 + extensionsLength, "\r\n", 2); upgradeResponseLength += 26 + extensionsLength + 2; } if (subprotocolLength) { memcpy(upgradeBuffer + upgradeResponseLength, "Sec-WebSocket-Protocol: ", 24); memcpy(upgradeBuffer + upgradeResponseLength + 24, subprotocol, subprotocolLength); memcpy(upgradeBuffer + upgradeResponseLength + 24 + subprotocolLength, "\r\n", 2); upgradeResponseLength += 24 + subprotocolLength + 2; } static char stamp[] = "Sec-WebSocket-Version: 13\r\nServer: uWebSockets\r\n\r\n"; memcpy(upgradeBuffer + upgradeResponseLength, stamp, sizeof(stamp) - 1); upgradeResponseLength += sizeof(stamp) - 1; uS::SocketData::Queue::Message *messagePtr = allocMessage(upgradeResponseLength, upgradeBuffer); bool wasTransferred; if (write(messagePtr, wasTransferred)) { if (!wasTransferred) { freeMessage(messagePtr); } else { messagePtr->callback = nullptr; } } else { onEnd(*this); return false; } } else { std::string upgradeHeaderBuffer = std::string("GET /") + getData()->path + " HTTP/1.1\r\n" "Upgrade: websocket\r\n" "Connection: Upgrade\r\n" "Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==\r\n" "Host: " + getData()->host + "\r\n" "Sec-WebSocket-Version: 13\r\n\r\n"; uS::SocketData::Queue::Message *messagePtr = allocMessage(upgradeHeaderBuffer.length(), upgradeHeaderBuffer.data()); bool wasTransferred; if (write(messagePtr, wasTransferred)) { if (!wasTransferred) { freeMessage(messagePtr); } else { messagePtr->callback = nullptr; } } else { onEnd(*this); return false; } } return true; }
void HttpSocket<isServer>::upgrade(const char *secKey, const char *extensions, size_t extensionsLength, const char *subprotocol, size_t subprotocolLength, bool *perMessageDeflate) { uS::SocketData::Queue::Message *messagePtr; if (isServer) { *perMessageDeflate = false; std::string extensionsResponse; if (extensionsLength) { Group<isServer> *group = getGroup<isServer>(*this); ExtensionsNegotiator<uWS::SERVER> extensionsNegotiator(group->extensionOptions); extensionsNegotiator.readOffer(std::string(extensions, extensionsLength)); extensionsResponse = extensionsNegotiator.generateOffer(); if (extensionsNegotiator.getNegotiatedOptions() & PERMESSAGE_DEFLATE) { *perMessageDeflate = true; } } unsigned char shaInput[] = "XXXXXXXXXXXXXXXXXXXXXXXX258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; memcpy(shaInput, secKey, 24); unsigned char shaDigest[SHA_DIGEST_LENGTH]; SHA1(shaInput, sizeof(shaInput) - 1, shaDigest); char upgradeBuffer[1024]; memcpy(upgradeBuffer, "HTTP/1.1 101 Switching Protocols\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: ", 97); base64(shaDigest, upgradeBuffer + 97); memcpy(upgradeBuffer + 125, "\r\n", 2); size_t upgradeResponseLength = 127; if (extensionsResponse.length()) { memcpy(upgradeBuffer + upgradeResponseLength, "Sec-WebSocket-Extensions: ", 26); memcpy(upgradeBuffer + upgradeResponseLength + 26, extensionsResponse.data(), extensionsResponse.length()); memcpy(upgradeBuffer + upgradeResponseLength + 26 + extensionsResponse.length(), "\r\n", 2); upgradeResponseLength += 26 + extensionsResponse.length() + 2; } if (subprotocolLength) { memcpy(upgradeBuffer + upgradeResponseLength, "Sec-WebSocket-Protocol: ", 24); memcpy(upgradeBuffer + upgradeResponseLength + 24, subprotocol, subprotocolLength); memcpy(upgradeBuffer + upgradeResponseLength + 24 + subprotocolLength, "\r\n", 2); upgradeResponseLength += 24 + subprotocolLength + 2; } static char stamp[] = "Sec-WebSocket-Version: 13\r\nWebSocket-Server: uWebSockets\r\n\r\n"; memcpy(upgradeBuffer + upgradeResponseLength, stamp, sizeof(stamp) - 1); upgradeResponseLength += sizeof(stamp) - 1; messagePtr = allocMessage(upgradeResponseLength, upgradeBuffer); } else { messagePtr = allocMessage(getData()->httpBuffer.length(), getData()->httpBuffer.data()); getData()->httpBuffer.clear(); } bool wasTransferred; if (write(messagePtr, wasTransferred)) { if (!wasTransferred) { freeMessage(messagePtr); } else { messagePtr->callback = nullptr; } } else { freeMessage(messagePtr); } }
OutputMessage::OutputMessage() { freeMessage(); }