void CWebSocket::OnRequestReceived(char* pHeader, DWORD dwHeaderLen, char* pData, DWORD dwDataLen, in_addr inad) { CStringA sHeader(pHeader, dwHeaderLen); CStringA sData(pData, dwDataLen); CStringA sURL; bool filereq=false; if(sHeader.Left(3) == "GET") sURL = sHeader.Trim(); else if(sHeader.Left(4) == "POST") sURL = "?" + sData.Trim(); // '?' to imitate GET syntax for ParseURL if(sURL.Find(" ") > -1) sURL = sURL.Mid(sURL.Find(" ")+1, sURL.GetLength()); if(sURL.Find(" ") > -1) sURL = sURL.Left(sURL.Find(" ")); if (sURL.GetLength()>4 && // min length (for valid extentions) (sURL.Right(4).MakeLower()==".gif" || sURL.Right(4).MakeLower()==".jpg" || sURL.Right(4).MakeLower()==".png" || sURL.Right(4).MakeLower()==".ico" ||sURL.Right(4).MakeLower()==".css" ||sURL.Right(3).MakeLower()==".js" || sURL.Right(4).MakeLower()==".bmp" || sURL.Right(5).MakeLower()==".jpeg" ) && sURL.Find("..")==-1 // dont allow leaving the emule-webserver-folder for accessing files ) filereq=true; ThreadData Data; Data.sURL = sURL; Data.pThis = m_pParent; Data.inadr = inad; Data.pSocket = this; if (!filereq) m_pParent->ProcessURL(Data); else m_pParent->ProcessFileReq(Data); Disconnect(); }
void CWebSocket::OnRequestReceived(char *pHeader, DWORD dwHeaderLen, char *pData, DWORD dwDataLen) { EMULE_TRY CStringA sHeader(pHeader, dwHeaderLen); CStringA sURL; int iIdx; bool bFileReq = false; if (sHeader.Left(3) == "GET") { sURL = sHeader.TrimRight(); } else if (sHeader.Left(4) == "POST") { CStringA sData(pData, dwDataLen); sURL = '?'; sURL += sData.Trim(); // '?' to imitate GET syntax for ParseURL } iIdx = sURL.Find(' '); if (iIdx >= 0) sURL = sURL.Mid(iIdx + 1); iIdx = sURL.Find(' '); if (iIdx >= 0) sURL = sURL.Left(iIdx); if (sURL.GetLength() > 4) { CStringA strExt4 = sURL.Right(4).MakeLower(); if (( (strExt4 == ".gif") || (strExt4 == ".jpg") || (strExt4 == ".png") || (strExt4 == ".ico") || (strExt4 == ".css") || (sURL.Right(3).MakeLower() == ".js") || (strExt4 == ".bmp") || (sURL.Right(5).MakeLower() == ".jpeg") || (strExt4 == ".xml") || (strExt4 == ".txt") ) && sURL.Find("..") < 0 ) // don't allow leaving the emule-webserver-folder for accessing files { bFileReq = true; } } // HTTP header AcceptEncoding CStringA strAcceptEncoding; iIdx = sHeader.Find("Accept-Encoding: "); if (iIdx >= 0) { int iIdx2 = sHeader.Find("\r\n", iIdx += 17); strAcceptEncoding = sHeader.Mid(iIdx, iIdx2 - iIdx); } // End AcceptEncoding // HTTP header IfModifiedSince CStringA strIfModifiedSince; iIdx = sHeader.Find("If-Modified-Since: "); if (iIdx >= 0) { int iIdx2 = sHeader.Find("\r\n", iIdx += 19); strIfModifiedSince = sHeader.Mid(iIdx, iIdx2 - iIdx); } // End IfModifiedSince ThreadData Data; Data.sURL = sURL; Data.pThis = m_pParent; Data.pSocket = this; Data.strAcceptEncoding = strAcceptEncoding; Data.strIfModifiedSince = strIfModifiedSince; if (!bFileReq) m_pParent->ProcessGeneralReq(Data); else m_pParent->ProcessFileReq(Data); Disconnect(); EMULE_CATCH2 }
void CMMSocket::OnRequestReceived(char* pHeader, DWORD dwHeaderLen, char* pData, DWORD dwDataLen) { CString sHeader(pHeader, dwHeaderLen); if(sHeader.Left(4) != "POST") return; if (!m_pOwner->PreProcessPacket(pData, dwDataLen, this)) return; try{ if (dwDataLen > 3){ try{ CMMData data(pData+3,dwDataLen-3); switch(pData[0]){ case MMP_HELLO: m_pOwner->ProcessHelloPacket(&data,this); break; case MMP_FILECOMMANDREQ: m_pOwner->ProcessFileCommand(&data,this); break; case MMP_FILEDETAILREQ: m_pOwner->ProcessDetailRequest(&data,this); break; case MMP_COMMANDREQ: m_pOwner->ProcessCommandRequest(&data,this); break; case MMP_SEARCHREQ: m_pOwner->ProcessSearchRequest(&data,this); break; case MMP_DOWNLOADREQ: m_pOwner->ProcessDownloadRequest(&data,this); break; case MMP_PREVIEWREQ: m_pOwner->ProcessPreviewRequest(&data,this); break; case MMP_CHANGELIMIT: m_pOwner->ProcessChangeLimitRequest(&data,this); break; case MMP_STATISTICSREQ: m_pOwner->ProcessStatisticsRequest(&data,this); break; } } catch(CFileException* error){ ASSERT ( false ); // remove later if (thePrefs.GetVerbose()) AddDebugLogLine(false, _T("Corrupt MobileMule Packet received")); error->Delete(); } } else{ switch(pData[0]){ case MMP_STATUSREQ: m_pOwner->ProcessStatusRequest(this); break; case MMP_FILELISTREQ: m_pOwner->ProcessFileListRequest(this); break; case MMP_FINISHEDREQ: m_pOwner->ProcessFinishedListRequest(this); break; } } } catch(...){ ASSERT ( false ); // remove later if (thePrefs.GetVerbose()) AddDebugLogLine(false, _T("Unexpected Error while processing MobileMule Packet")); } }
std::string GetConfigHeader() { std::string sHeader( "Simple config file " ); sHeader += PACKAGE " " VERSION; return sHeader; }
CString CPop3Message::GetHeaderItem(const CString& sName, int nItem) const { //Value which will be returned by this function CString sField; //Get the message header (add an extra "\r\n" at the //begining to aid in the parsing) CString sHeader(_T("\r\n")); sHeader += GetHeader(); CString sUpCaseHeader(sHeader); sUpCaseHeader.MakeUpper(); CString sUpCaseName(sName); sUpCaseName.MakeUpper(); //Find the specified line in the header CString sFind(CString(_T("\r\n")) + sUpCaseName + _T(":")); int nFindLength = sFind.GetLength(); int nFindStart = sUpCaseHeader.Find(sFind); int nFind = nFindStart; for (int i=0; i<nItem; i++) { //Get ready for the next loop around sUpCaseHeader = sUpCaseHeader.Right(sUpCaseHeader.GetLength() - nFind - nFindLength); nFind = sUpCaseHeader.Find(sFind); if (nFind == -1) return _T(""); //Not found else nFindStart += (nFind + nFindLength); } if (nFindStart != -1) nFindStart += (3 + sName.GetLength()); if (nFindStart != -1) { BOOL bFoundEnd = FALSE; int i = nFindStart; int nLength = sHeader.GetLength(); do { //Examine the current 3 characters TCHAR c1 = _T('\0'); if (i < nLength) c1 = sHeader[i]; TCHAR c2 = _T('\0'); if (i < (nLength-1)) c2 = sHeader[i+1]; TCHAR c3 = _T('\0'); if (i < (nLength-2)) c3 = sHeader[i+2]; //Have we found the terminator if ((c1 == _T('\0')) || ((c1 == _T('\r')) && (c2 == _T('\n')) && (c3 != _T(' ')) && c3 != _T('\t'))) { bFoundEnd = TRUE; } else { //Move onto the next character ++i; } } while (!bFoundEnd); sField = sHeader.Mid(nFindStart, i - nFindStart); //Remove any embedded "\r\n" sequences from the field int nEOL = sField.Find(_T("\r\n")); while (nEOL != -1) { sField = sField.Left(nEOL) + sField.Right(sField.GetLength() - nEOL - 2); nEOL = sField.Find(_T("\r\n")); } //Replace any embedded "\t" sequences with spaces int nTab = sField.Find(_T('\t')); while (nTab != -1) { sField = sField.Left(nTab) + _T(' ') + sField.Right(sField.GetLength() - nTab - 1); nTab = sField.Find(_T('\t')); } //Remove any leading or trailing white space from the Field Body sField.TrimLeft(); sField.TrimRight(); } return sField; }