bool CHttpConnection::getFile(const CUrl &url, const string &filename) {
  CHttpRequest request;
  request.setFromUrl(url);
  request.setUserAgent(CHttpRequest::UAExplorer6);

  return(getFile(url,filename,request));
}
예제 #2
0
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);
	}
}
예제 #3
0
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)));
}
예제 #4
0
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;
}
예제 #5
0
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");
	}
}
예제 #6
0
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);
}
예제 #8
0
파일: main.cpp 프로젝트: msng4t/network-etc
    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);
  }
}
예제 #10
0
CHttpRequest * CWebApplication::createHttpRequest()
{
	CHttpRequest * request = new CHttpRequest(this);
	request->init();
	return request;
}
예제 #11
0
UINT CHttpRequest::ThreadStart(LPVOID lpParameter)
{
	CHttpRequest* pRequest = reinterpret_cast<CHttpRequest*>(lpParameter);
	return (DWORD)pRequest->Run();
}
예제 #12
0
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;
}