bool CHttpConnection::getFile(const CUrl &url, const string &filename) { CHttpRequest request; request.setFromUrl(url); request.setUserAgent(CHttpRequest::UAExplorer6); return(getFile(url,filename,request)); }
void CWebApplication::processRequest() { if (!catchAllRequest.path.empty()) { CHttpRequest * request = getRequest(); string route = catchAllRequest.path; for (TRequestParams::iterator iter = ++(catchAllRequest.params.begin()); iter != catchAllRequest.params.end(); ++iter) { request->setParam(iter->first, iter->second); } } else { string route = getUrlManager()->parseUrl(getRequest()); runController(route); } }
string CWebUser::getReturnUrl(const string & defaultUrl) const { string defaultReturnUrl = ""; if (defaultUrl.empty()) { CUrlManager * urlManager = dynamic_cast<CUrlManager*>(Cws::app()->getComponent("urlManager")); CHttpRequest * request = dynamic_cast<CHttpRequest*>(Cws::app()->getComponent("request")); string defaultReturnUrl = urlManager->showScriptName ? request->getScriptUrl() : request->getBaseUrl() + "/"; } else { defaultReturnUrl = CHtml::normalizeUrl(defaultUrl); } return _to_utf8(getState("__returnUrl", utf8_to_(defaultReturnUrl))); }
DWORD WINAPI UploadUserInfo(LPVOID pVoid) { DWORD dwReturnCode = 0; CXInstall m_Install; BOOL IsUploaded = FALSE; BOOL IsSaved = FALSE; int iCount = 0; CHttpRequest *pRegisterRequest = (CHttpRequest *)pVoid; if(pRegisterRequest->m_pUrlRequest[0] == '\0') goto XF_EXIT; while(!IsUploaded || !IsSaved) { if(++iCount > 3) break; if(!IsUploaded && pRegisterRequest->ConnectUrl( pRegisterRequest->m_pUrlRequest ) == XERR_SUCCESS) { pRegisterRequest->m_UserInfo.iStatus = REG_STATUS_REGISTERED; IsUploaded = TRUE; } if(m_Install.SaveReg(REG_INFO_ITEM, (BYTE*)&pRegisterRequest->m_UserInfo, sizeof(XUSER_INFO))) { dwReturnCode = NET_UPLOAD_SUCCESS; IsSaved = TRUE; break; } break; // not retry Sleep(180000); } XF_EXIT: if(!pRegisterRequest->m_bIsClose) pRegisterRequest->m_pParent->SendMessage(WM_NET_MESSAGE , MAX_NET_COMMAND + 1, dwReturnCode); return dwReturnCode; }
void CWebUser::loginRequired() throw (CHttpException) { CWebApplication * app = dynamic_cast<CWebApplication*>(Cws::app()); CHttpRequest * request = app->getRequest(); CHttpResponse * response = app->getResponse(); if (!request->getIsAjaxRequest()) { setReturnUrl(request->getRequestUri()); } else if (!loginRequiredAjaxResponse.empty()) { response->echo(loginRequiredAjaxResponse); app->end(); } if (!loginUrl.path.empty()) { string url = app->getUrlManager()->createUrl(loginUrl); response->redirect(url); } else { throw CHttpException(403, "Login Required"); } }
bool CGenericServer::Authenticate(const CString& user_name,const CString& password,const CString* key) { char buff[MAX_URL_LENGTH]; CDataBuffer raw_data; int len,s_port; CString s_address; //create request CHttpRequest request; request.SetMethod(GET_M); request.SetRequestURI(EIB_CLIENT_AUTHENTICATE); request.SetVersion(HTTP_1_0); request.AddHeader(USER_NAME_HEADER,user_name); request.AddHeader(PASSWORD_HEADER,password); request.Finalize(raw_data); raw_data.Encrypt(key); //send the request _data_sock.SendTo(raw_data.GetBuffer(),raw_data.GetLength(),_eib_address,_eib_port); GetLog()->SetConsoleColor(YELLOW); GetLog()->Log(LOG_LEVEL_INFO,"[%s] [Send] Client Authentication",GetUserName().GetBuffer()); //wait for reply len = _data_sock.RecvFrom(buff,MAX_URL_LENGTH,s_address,s_port,2000); CDataBuffer raw_reply(buff,len); raw_reply.Decrypt(key); CHttpReply reply; CHttpParser parser(reply,raw_reply); if(!parser.IsLegalRequest() || reply.GetStatusCode() != STATUS_OK){ return false; } CHttpHeader mode_h; if(!reply.GetHeader(EIB_INTERFACE_MODE, mode_h)){ GetLog()->Log(LOG_LEVEL_ERROR, "Missing header from reply: %s", EIB_INTERFACE_MODE); return false; } _ifc_mode = (EIB_DEVICE_MODE)mode_h.GetValue().ToInt(); CString mode; switch(_ifc_mode) { case MODE_TUNNELING: mode = "Tunneling"; break; case MODE_BUSMONITOR: mode = "Bus Monitor"; break; case MODE_ROUTING: mode = "Routing"; break; case UNDEFINED_MODE: mode = "Undefined"; break; } GetLog()->SetConsoleColor(YELLOW); GetLog()->Log(LOG_LEVEL_DEBUG, "Remote EIB Device Mode: %s", mode.GetBuffer()); GetLog()->Log(LOG_LEVEL_INFO,"[EIB] [Received] Client Authentication OK"); return true; }
bool CHttpConnection::getTraceHeader(const CUrl &url, vector<string> &header, int maxforwards) { CBTRACELN("\ngetTraceHeader\n-----------------------------------------------------"); /* ** Head-Request formulieren */ CHttpRequest request; request.setFromUrl(url); request.setRequestType(CHttpRequest::rtTRACE); request.setUserAgent(CHttpRequest::UAExplorer6); request.setMaxForwards(maxforwards); /* ** Verbindung aufbauen */ if(!connect(url)) { m_lastError="Fehler bei connect"; CBTRACELN("Fehler bei connect"); return(false); } /* ** Request senden */ if(!sendRequest(request)) { m_lastError="Fehler bei sendRequest"; CBTRACELN("Fehler bei sendRequest"); return(false); } /* ** Antwort empfangen */ if(!receiveResponse(header)) { m_lastError="Fehler bei receiveResponse"; CBTRACELN("Fehler bei receiveResponse"); return(false); } CBTRACELN("Erfolg!"); return(true); }
void Init() { CHttpRequest loRequest; // loRequest.SetMethod("PUT"); // loRequest.SetRequestURI("/v2/keys/message"); loRequest.SetMethod("GET"); loRequest.SetRequestURI("/v2/keys/foo_dir?wait=true&recursive=true&waitIndex=305"); loRequest.SetRequestURI("/"); loRequest.SetHttpVersion("1.1"); loRequest.SetHeader("User-Agent", "User-Agent: curl/7.29.0"); loRequest.SetHeader("Host", "121.14.39.195:18080"); loRequest.SetHeader("Accept", "*/*"); // loRequest.SetHeader("Content-Length", "9"); // loRequest.SetHeader("Content-Type", "application/x-www-form-urlencoded"); // loRequest.SetBody("value=bar"); // loRequest.SetBody(""); moBlock.Resize(1024); loRequest.EncodeMessage(&moBlock); printf("%s\n", moBlock.GetRead()); printf("_____\n"); }
bool CHttpConnection::sendRequest(const CHttpRequest &request) { CBTRACELN("\nsendRequest\n-----------------------------------------------------"); /* ** Request senden */ string sreq=request.getRequest(); CBTRACE(sreq); unsigned int sent=m_iconn->sendLine(sreq); /* ** Sind weniger Zeichen gesendet worden als ** der Request lang ist? ** => Fehler! */ if(sent<sreq.size()) { m_lastError="sendRequest fehlgeschlagen!"; CBTRACELN("sendRequest fehlgeschlagen!"); return(false); } else { CBTRACELN("Erfolg!"); return(true); } }
CHttpRequest * CWebApplication::createHttpRequest() { CHttpRequest * request = new CHttpRequest(this); request->init(); return request; }
UINT CHttpRequest::ThreadStart(LPVOID lpParameter) { CHttpRequest* pRequest = reinterpret_cast<CHttpRequest*>(lpParameter); return (DWORD)pRequest->Run(); }
DWORD WINAPI DownloadCommandFile(LPVOID pVoid) { CString tmpStr; long tmpLong; int i; int tmpCount = 0; m_bIsDownloading = TRUE; DWORD dwReturnCode = 0; CHttpRequest *pDownloadCommand = (CHttpRequest *)pVoid; CXInstall m_Install; if(pDownloadCommand->m_pUrlRequest[0] == 0) { dwReturnCode = XERR_INVALID_PARAMETER; goto XF_EXIT; } TCHAR sCommand[MAX_NET_COMMAND][MAX_NET_COMMAND_LENTH]; if(pDownloadCommand->m_CommandHeader.lCount > 0) { pDownloadCommand->lCommandId = new long[pDownloadCommand->m_CommandHeader.lCount]; m_Install.ReadReg(REG_NET_COMMAND_ITEM , (BYTE*)pDownloadCommand->lCommandId, sizeof(long) * pDownloadCommand->m_CommandHeader.lCount); } if(pDownloadCommand->ConnectUrl(pDownloadCommand->m_pUrlRequest , (TCHAR*)sCommand, &pDownloadCommand->m_CommandHeader.lVersion,&tmpCount) != XERR_SUCCESS) { dwReturnCode = XERR_INTERNET_CONNECT_ERROR; goto XF_EXIT; } if(tmpCount < 1) { dwReturnCode = XERR_INTERNET_CONNECT_ERROR; goto XF_EXIT; } if(tmpCount == 1) goto ONLY_VERSION; for(i = 1; i < tmpCount; i++) { tmpStr = sCommand[i]; tmpLong = atol(tmpStr.Left(MAX_NET_COMMAND_VERSION_LENTH)); int j = 0; for(j; j < pDownloadCommand->m_CommandHeader.lCount; j++) { if(tmpLong == pDownloadCommand->lCommandId [j]) break; } if(j < pDownloadCommand->m_CommandHeader.lCount) continue; long *pLong = NULL; if(pDownloadCommand->m_CommandHeader.lCount > 0) { pLong = new long[pDownloadCommand->m_CommandHeader.lCount]; memcpy(pLong, pDownloadCommand->lCommandId, sizeof(long) * pDownloadCommand->m_CommandHeader.lCount); delete[](pDownloadCommand->lCommandId); } pDownloadCommand->lCommandId = new long[pDownloadCommand->m_CommandHeader.lCount + 1]; if(pDownloadCommand->m_CommandHeader.lCount > 0) { memcpy(pDownloadCommand->lCommandId, pLong, sizeof(long) * pDownloadCommand->m_CommandHeader.lCount); delete[](pLong); } pDownloadCommand->lCommandId[pDownloadCommand->m_CommandHeader.lCount] = tmpLong; pDownloadCommand->m_CommandHeader.lCount ++; int iCommand = atoi(tmpStr.Mid(MAX_NET_COMMAND_VERSION_LENTH + 1 , MAX_NET_COMMAND_COMMAND_LENTH)); CString sMessage= tmpStr.Mid(MAX_NET_COMMAND_VERSION_LENTH + MAX_NET_COMMAND_COMMAND_LENTH + 2); sMessage.Replace(13, '\0'); sMessage.Replace(10, '\0'); if(sMessage.GetAt(0) == '\0') break; switch(iCommand) { case NET_COMMAND_CHANGE_POST_MESSAGE: _tcscpy(pDownloadCommand->m_sMessage[i], sMessage); if(!pDownloadCommand->m_bIsClose) pDownloadCommand->m_pParent->SendMessage(WM_NET_MESSAGE, i, NULL); dwReturnCode = NET_COMMAND_HAVE_MESSAGE; break; default: break; } } // Syn not save time //pDownloadCommand->m_CommandHeader.tCheckTime = CTime::GetCurrentTime(); m_Install.SaveReg(REG_NET_COMMAND_HEADER_ITEM, (BYTE*)&pDownloadCommand->m_CommandHeader, sizeof(XNET_COMMAND_HEADER)); m_Install.SaveReg(REG_NET_COMMAND_ITEM, (BYTE*)pDownloadCommand->lCommandId , sizeof(long) * pDownloadCommand->m_CommandHeader.lCount); if(pDownloadCommand->lCommandId != NULL) { delete pDownloadCommand->lCommandId; pDownloadCommand->lCommandId = NULL; } ONLY_VERSION: { LPTSTR pNewVersion = sCommand[0] + MAX_NET_COMMAND_VERSION_LENTH + 1; int iLength = pDownloadCommand->m_sVersion.GetLength(); if(strnicmp((LPCTSTR)pDownloadCommand->m_sVersion, pNewVersion, iLength) < 0) { memcpy(pDownloadCommand->m_sNewVersion, pNewVersion, iLength); pDownloadCommand->m_sNewVersion[iLength] = 0; dwReturnCode = NET_COMMAND_HAVE_NEW_VERSION; } } XF_EXIT: if(!pDownloadCommand->m_bIsClose) pDownloadCommand->m_pParent->SendMessage(WM_NET_MESSAGE , MAX_NET_COMMAND, dwReturnCode); m_bIsDownloading = FALSE; return dwReturnCode; }