Exemple #1
0
// 下载URL文件到本地
bool CTyHttpClient::DownloadUrl( const char * url, const char *pszPath, const char *pszFileName/*=NULL*/ )
{
    NormalizationUrl();
    if(!ParseUrl(url))
        return false;

    if (!Create_Connect(m_strHost.c_str(), m_nPort))
        return false;

    if (GetReservedBufSize(CTySocket::typeRead) < 1024*100)
        SetReservedBufSize(CTySocket::typeRead, 1024*100);

    SendRequest();
    if(RecvResponseHead())
    {
        if(!pszFileName)
            pszFileName = m_strHttpFileName.c_str();

        string strPathName;
        if (pszPath)
		{
            strPathName = pszPath;
			strPathName += DIR_SLASH;
		}
		
        strPathName += pszFileName;
        return SaveHttpFile(strPathName.c_str());
     }

    return false;
}
Exemple #2
0
NS_IMETHODIMP nsSmtpUrl::SetSpec(const nsACString &aSpec)
{
  nsresult rv = nsMsgMailNewsUrl::SetSpec(aSpec);
  if (NS_SUCCEEDED(rv))
    rv = ParseUrl();
  return rv;
}
NS_IMETHODIMP nsMailboxUrl::SetQuery(const nsACString &aQuery)
{
  nsresult rv = nsMsgMailNewsUrl::SetQuery(aQuery);
  if (NS_SUCCEEDED(rv))
    rv = ParseUrl();
  return rv;
}
Exemple #4
0
HRESULT CHttpDownloader::Load(LPCTSTR szUrl, IStream **ppStream, LPCTSTR szMD5)
{
	HRESULT hr = E_FAIL;

	m_longAbort	=	0;
	Clear();

	*ppStream = NULL;
	m_dwDownloaded = 0;
	m_dwTotalSize = 0;

	m_request.md5 = szMD5;
	hr = ParseUrl(szUrl);
	if(SUCCEEDED(hr))
	{
		if(m_pStream)
		{
			m_pStream->Release();
			m_pStream = NULL;
		}

		m_context.op = HTTP_DOWNLOADER_OP_IDLE;
		m_context.hEvent = m_hEvent;
		SetEvent(m_hEvent);

		hr = WorkFunction();
		if(SUCCEEDED(hr))
		{
			m_pStream->AddRef();
			*ppStream = m_pStream;
		}
	}
	return hr;
}
NS_IMETHODIMP 
nsAddbookUrl::SetSpec(const nsACString &aSpec)
{
  nsresult rv = m_baseURL->SetSpec(aSpec);
  NS_ENSURE_SUCCESS(rv, rv);
  return ParseUrl();
}
Exemple #6
0
int CHttpClient::PostFile(string url)
{
	string host, path;
	int port = 0;
	if(ParseUrl(url, host, port, path) != 0)
	{
		m_errno = -9;
		return -1;
	}

	//LOG.Log("Access url: %s", url.c_str());

	m_reqMsg.SetHost(host, port);
	m_reqMsg.SetPath(path);

	int64 startTime = GetMilSec();

	int connSucc = 0;
	int sock = -1;
	int i;
	for(i = 0; i < 1; i++)
	{
		sock = CTcpSock::Create();
		if(CTcpSock::Connect(sock, host, port, 3000) == 0)
		{
			connSucc = 1;
			break;
		}
		else
		{
			CTcpSock::Close(sock);
		}
	}

	if(!connSucc)
	{
		m_errno = -1;
		return -1;
	}

	if(m_reqMsg.PostFile(sock) != 0)
	{
		m_errno = -2;
		CTcpSock::Close(sock);
		return -1;
	}

	if(m_resMsg.RecvMsg(sock) != 0)
	{
		m_errno = -2;
		CTcpSock::Close(sock);
		return -1;
	}

	m_errno = 0;
	CTcpSock::Close(sock);

	return 0;
}
Exemple #7
0
PACK *WpcCallEx(char *url, INTERNET_SETTING *setting, UINT timeout_connect, UINT timeout_comm,
				char *function_name, PACK *pack, X *cert, K *key, void *sha1_cert_hash, bool *cancel, UINT max_recv_size,
				char *additional_header_name, char *additional_header_value)
{
	URL_DATA data;
	BUF *b, *recv;
	UINT error;
	WPC_PACKET packet;
	// Validate arguments
	if (function_name == NULL || pack == NULL)
	{
		return PackError(ERR_INTERNAL_ERROR);
	}

	if (ParseUrl(&data, url, true, NULL) == false)
	{
		return PackError(ERR_INTERNAL_ERROR);
	}

	PackAddStr(pack, "function", function_name);

	b = WpcGeneratePacket(pack, cert, key);
	if (b == NULL)
	{
		return PackError(ERR_INTERNAL_ERROR);
	}

	SeekBuf(b, b->Size, 0);
	WriteBufInt(b, 0);
	SeekBuf(b, 0, 0);

	if (IsEmptyStr(additional_header_name) == false && IsEmptyStr(additional_header_value) == false)
	{
		StrCpy(data.AdditionalHeaderName, sizeof(data.AdditionalHeaderName), additional_header_name);
		StrCpy(data.AdditionalHeaderValue, sizeof(data.AdditionalHeaderValue), additional_header_value);
	}

	recv = HttpRequestEx(&data, setting, timeout_connect, timeout_comm, &error,
		false, b->Buf, NULL, NULL, sha1_cert_hash, cancel, max_recv_size);

	FreeBuf(b);

	if (recv == NULL)
	{
		return PackError(error);
	}

	if (WpcParsePacket(&packet, recv) == false)
	{
		FreeBuf(recv);
		return PackError(ERR_PROTOCOL_ERROR);
	}

	FreeBuf(recv);

	FreeX(packet.Cert);

	return packet.Pack;
}
char* HttpServer::GetArg(char *str)
{
  static char clientline[CMDBUF];

  if(str != NULL)
  {
	  sprintf(clientline,"%s",ParseUrl(str));
	  return strtok(clientline,"/");
  }
  else
  {
	  return strtok(NULL,"/");
  }
}
Exemple #9
0
bool CServer::ParseUrl(wxString host, const wxString& port, wxString user, wxString pass, wxString &error, CServerPath &path)
{
	unsigned long nPort = 0;
	if (!port.empty())
	{
		if (port.size() > 5 || !port.ToULong(&nPort) || !nPort || nPort > 65535)
		{
			error = _("Invalid port given. The port has to be a value from 1 to 65535.");
			error += _T("\n");
			error += _("You can leave the port field empty to use the default port.");
			return false;
		}
	}
	return ParseUrl(host, nPort, user, pass, error, path);
}
Exemple #10
0
static int FontFace_ParseSrc(LCUI_CSSFontFace face, const char *str,
			     const char *dirname)
{
	LCUI_StyleRec style;
	if (face->src) {
		free(face->src);
	}
	if (ParseUrl(&style, str, dirname)) {
		face->src = style.val_string;
		return 0;
	}
	free(face->src);
	face->src = NULL;
	return -1;
}
Exemple #11
0
void WebProcessor::Execute()
{
	m_gzip =false;
	m_userAccess = uaControl;
	m_authInfo[0] = '\0';
	m_authToken[0] = '\0';

	ParseHeaders();

	if (m_httpMethod == hmPost && m_contentLen <= 0)
	{
		error("Invalid-request: content length is 0");
		return;
	}

	if (m_httpMethod == hmOptions)
	{
		SendOptionsResponse();
		return;
	}

	ParseUrl();

	if (!CheckCredentials())
	{
		SendAuthResponse();
		return;
	}

	if (m_httpMethod == hmPost)
	{
		// reading http body (request content)
		m_request.Reserve(m_contentLen);
		m_request[m_contentLen] = '\0';

		if (!m_connection->Recv(m_request, m_contentLen))
		{
			error("Invalid-request: could not read data");
			return;
		}
		debug("Request=%s", *m_request);
	}

	debug("request received from %s", m_connection->GetRemoteAddr());

	Dispatch();
}
Exemple #12
0
std::string Repository::PathFromUrl(std::string url) {
	fs::path path(base_path_);
	
	UrlInfo url_info = ParseUrl(url);
	
	// добавляем директорию с схемой и доменом
	{
		std::string schema = url_info.schema;
		std::transform(schema.begin(), schema.end(), schema.begin(), tolower);
	
		std::string top_dir;
		if(schema == std::string("https")) {
			top_dir += "https_";
		} else {
			top_dir += "http_";
		}
		top_dir += url_info.domain;
		path /= SanitizePath(top_dir);
	}
	
	// добавляем директории с путем
	path /=  SanitizePath(url_info.path);
	if(path.filename()=="." || url_info.path.empty()) {
		// если путь в URL заканчивается на / или пуст (только домен)
		path /= "_";
	}
	
	// добавляем запрос
	if(!url_info.query.empty()) {
		path += '_';
		path += url_info.query;
	}
	
	// добавляем расширение файла
	if(path.extension().empty()) {
		path += ".html";
	}
	
	return path.native();
}
Exemple #13
0
CHttpUrl::CHttpUrl(std::string const &url)
{
	ParseUrl(url);
}
Exemple #14
0
UINT DCGetMyIpMain(DDNS_CLIENT *c, bool ipv6, char *dst, UINT dst_size, bool use_ssl, char *replace_v6)
{
	char *url;
	char url2[MAX_SIZE];
	UINT ret = ERR_INTERNAL_ERROR;
	URL_DATA data;
	BUF *recv;
	BUF *cert_hash;
	// Validate arguments
	if (dst == NULL || c == NULL)
	{
		return ERR_INTERNAL_ERROR;
	}

	if (ipv6 == false)
	{
		url = DDNS_URL2_V4_GLOBAL;

		if (IsUseAlternativeHostname())
		{
			url = DDNS_URL2_V4_ALT;
		}
	}
	else
	{
		url = DDNS_URL2_V6_GLOBAL;

		if (IsUseAlternativeHostname())
		{
			url = DDNS_URL2_V6_ALT;
		}

		if (replace_v6)
		{
			url = replace_v6;
		}
	}

	Format(url2, sizeof(url2), "%s?v=%I64u", url, Rand64());

	if (use_ssl)
	{
		ReplaceStr(url2, sizeof(url2), url2, "http://", "https://");
	}

	if (ParseUrl(&data, url2, false, NULL) == false)
	{
		return ERR_INTERNAL_ERROR;
	}

	cert_hash = StrToBin(DDNS_CERT_HASH);

	recv = HttpRequest(&data, (ipv6 ? NULL : &c->InternetSetting), DDNS_CONNECT_TIMEOUT, DDNS_COMM_TIMEOUT, &ret, false, NULL, NULL,
		NULL, ((cert_hash != NULL && cert_hash->Size == SHA1_SIZE) ? cert_hash->Buf : NULL));

	FreeBuf(cert_hash);

	if (recv != NULL)
	{
		char *str = ZeroMalloc(recv->Size + 1);
		Copy(str, recv->Buf, recv->Size);

		if (StartWith(str, "IP=") == false)
		{
			ret = ERR_PROTOCOL_ERROR;
		}
		else
		{
			StrCpy(dst, dst_size, str + 3);
			ret = ERR_NO_ERROR;
		}

		Free(str);
		FreeBuf(recv);
	}

	if (IsUseAlternativeHostname() == false)
	{
		if (ret == ERR_CONNECT_FAILED)
		{
			if (ipv6 && replace_v6 == NULL && use_ssl == false)
			{
				UINT type = DetectFletsType();

				if (type & FLETS_DETECT_TYPE_EAST_BFLETS_PRIVATE && ret != ERR_NO_ERROR)
				{
					ret = DCGetMyIpMain(c, ipv6, dst, dst_size, use_ssl, DDNS_REPLACE_URL2_FOR_EAST_BFLETS);
				}

				if (type & FLETS_DETECT_TYPE_EAST_NGN_PRIVATE && ret != ERR_NO_ERROR)
				{
					ret = DCGetMyIpMain(c, ipv6, dst, dst_size, use_ssl, DDNS_REPLACE_URL2_FOR_EAST_NGN);
				}

				if (type & FLETS_DETECT_TYPE_WEST_NGN_PRIVATE && ret != ERR_NO_ERROR)
				{
					ret = DCGetMyIpMain(c, ipv6, dst, dst_size, use_ssl, DDNS_REPLACE_URL2_FOR_WEST_NGN);
				}
			}
		}
	}

	return ret;
}
Exemple #15
0
int CHttpClient::AccessUrl(string url, int timeout, int redirectLevel)
{
	if(timeout <= 0)
		timeout = 99999999;

	m_resMsg.Clear();

	string host, path;
	int port = 0;
	if(ParseUrl(url, host, port, path) != 0)
	{
		m_errno = -1;
		return -1;
	}

	//LOG.Log("Access url: %s", url.c_str());

	m_reqMsg.SetHost(host, port);
	m_reqMsg.SetPath(path);

	int64 startTime = GetMilSec();

	string ip;
	if(ntohl(inet_addr(host.c_str())) != 0xffffffff
		&& ntohl(inet_addr(host.c_str())) > ntohl(inet_addr("1.0.0.0")))
	{
		ip = host;
	}
	else
	{
		struct hostent * phe;
		phe = gethostbyname(host.c_str()); 
		if (phe == NULL)
		{
			m_errno = -1;
			return -1;  
		} 
		else
		{
			struct in_addr addr;
			addr.s_addr = *(unsigned long *) phe->h_addr_list[0]; 
			ip = inet_ntoa(addr);
		}
	}

	int sock = socket(AF_INET, SOCK_STREAM, 0);
	if(sock == -1)
	{
		m_errno = -2;
		return -1;
	}

	struct sockaddr_in servAddr;
	servAddr.sin_family = AF_INET;
	servAddr.sin_addr.s_addr = inet_addr(ip.c_str());
	servAddr.sin_port = htons(port);

	if(connect(sock, (struct sockaddr *)&servAddr, sizeof(servAddr)) == -1)
	{
		m_errno = -3;
		CTcpSock::Close(sock);
		return -1;
	}

	//重新计算超时时长
	timeout -= GetMilSec() - startTime;
	if(timeout <= 0)
	{
		m_errno = -4;
		CTcpSock::Close(sock);
		return -1;
	}

	startTime = GetMilSec();

	if(m_reqMsg.SendMsg(sock, timeout) != 0)
	{
		m_errno = -5;
		CTcpSock::Close(sock);
		return -1;
	}

	//重新计算超时时长
	timeout -= GetMilSec() - startTime;
	if(timeout <= 0)
	{
		m_errno = -4;
		CTcpSock::Close(sock);
		return -1;
	}

	string reqCmd;
	m_reqMsg.GetCmd(reqCmd);
	if(reqCmd == "HEAD")
		m_resMsg.SetOnlyHead(1);

	if(m_resMsg.RecvMsg(sock, timeout) != 0)
	{
		m_errno = -6;
		CTcpSock::Close(sock);
		return -1;
	}

	m_errno = 0;
	CTcpSock::Close(sock);

	int stateCode;
	m_resMsg.GetStatusCode(stateCode);
	if(redirectLevel > 0 && (stateCode == 301 || stateCode == 302))
	{
		string location;
		m_resMsg.GetHeader("Location", location);
		if(location.size() > 0)
		{
			string newLocation;
			CvtAbsUrl(url, location, newLocation);
			return AccessUrl(newLocation, timeout, redirectLevel-1);
		}
	}

	return 0;
}
Exemple #16
0
void CSkypeProto::OnChatEvent(const JSONNode &node)
{
	//std::string clientMsgId = node["clientmessageid"].as_string();
	//std::string skypeEditedId = node["skypeeditedid"].as_string();

	std::string fromLink = node["from"].as_string();
	CMStringA from(ContactUrlToName(fromLink.c_str()));

	time_t timestamp = IsoToUnixTime(node["composetime"].as_string().c_str());

	std::string content = node["content"].as_string();
	int emoteOffset = node["skypeemoteoffset"].as_int();

	std::string conversationLink = node["conversationLink"].as_string();
	CMStringA chatname(ChatUrlToName(conversationLink.c_str()));

	CMString topic(node["threadtopic"].as_mstring());
	if (FindChatRoom(chatname) == NULL)
		SendRequest(new GetChatInfoRequest(m_szRegToken, chatname, m_szServer), &CSkypeProto::OnGetChatInfo, topic.Detach());

	std::string messageType = node["messagetype"].as_string();
	if (!mir_strcmpi(messageType.c_str(), "Text") || !mir_strcmpi(messageType.c_str(), "RichText"))
	{
		AddMessageToChat(_A2T(chatname), _A2T(from), content.c_str(), emoteOffset != NULL, emoteOffset, timestamp);
	}
	else if (!mir_strcmpi(messageType.c_str(), "ThreadActivity/AddMember"))
	{
		ptrA xinitiator, xtarget, initiator;
		//content = <addmember><eventtime>1429186229164</eventtime><initiator>8:initiator</initiator><target>8:user</target></addmember>

		HXML xml = xmlParseString(ptrT(mir_a2t(content.c_str())), 0, _T("addmember"));
		if (xml == NULL)
			return;

		for (int i = 0; i < xmlGetChildCount(xml); i++)
		{
			HXML xmlNode = xmlGetNthChild(xml, L"target", i);
			if (xmlNode == NULL)
				break;

			xtarget = mir_t2a(xmlGetText(xmlNode));

			CMStringA target = ParseUrl(xtarget, "8:");
			AddChatContact(_A2T(chatname), target, target, L"User");
		}
		xmlDestroyNode(xml);
	}
	else if (!mir_strcmpi(messageType.c_str(), "ThreadActivity/DeleteMember"))
	{
		ptrA xinitiator, xtarget;
		//content = <addmember><eventtime>1429186229164</eventtime><initiator>8:initiator</initiator><target>8:user</target></addmember>

		HXML xml = xmlParseString(ptrT(mir_a2t(content.c_str())), 0, _T("deletemember"));
		if (xml != NULL) {
			HXML xmlNode = xmlGetChildByPath(xml, _T("initiator"), 0);
			xinitiator = node != NULL ? mir_t2a(xmlGetText(xmlNode)) : NULL;

			xmlNode = xmlGetChildByPath(xml, _T("target"), 0);
			xtarget = xmlNode != NULL ? mir_t2a(xmlGetText(xmlNode)) : NULL;

			xmlDestroyNode(xml);
		}
		if (xtarget == NULL)
			return;

		CMStringA target = ParseUrl(xtarget, "8:");
		CMStringA initiator = ParseUrl(xinitiator, "8:");
		RemoveChatContact(_A2T(chatname), target, target, true, initiator);

	}
	else if (!mir_strcmpi(messageType.c_str(), "ThreadActivity/TopicUpdate"))
	{
		//content=<topicupdate><eventtime>1429532702130</eventtime><initiator>8:user</initiator><value>test topic</value></topicupdate>
		ptrA xinitiator, value;
		HXML xml = xmlParseString(ptrT(mir_a2t(content.c_str())), 0, _T("topicupdate"));
		if (xml != NULL) {
			HXML xmlNode = xmlGetChildByPath(xml, _T("initiator"), 0);
			xinitiator = xmlNode != NULL ? mir_t2a(xmlGetText(xmlNode)) : NULL;

			xmlNode = xmlGetChildByPath(xml, _T("value"), 0);
			value = xmlNode != NULL ? mir_t2a(xmlGetText(xmlNode)) : NULL;

			xmlDestroyNode(xml);
		}

		CMStringA initiator = ParseUrl(xinitiator, "8:");
		RenameChat(chatname, value);
		ChangeChatTopic(chatname, value, initiator);
	}
	else if (!mir_strcmpi(messageType.c_str(), "ThreadActivity/RoleUpdate"))
	{
		//content=<roleupdate><eventtime>1429551258363</eventtime><initiator>8:user</initiator><target><id>8:user1</id><role>admin</role></target></roleupdate>
		ptrA xinitiator, xId, xRole;
		HXML xml = xmlParseString(ptrT(mir_a2t(content.c_str())), 0, _T("roleupdate"));
		if (xml != NULL) {
			HXML xmlNode = xmlGetChildByPath(xml, _T("initiator"), 0);
			xinitiator = xmlNode != NULL ? mir_t2a(xmlGetText(xmlNode)) : NULL;

			xmlNode = xmlGetChildByPath(xml, _T("target"), 0);
			if (xmlNode != NULL)
			{
				HXML xmlId = xmlGetChildByPath(xmlNode, _T("id"), 0);
				HXML xmlRole = xmlGetChildByPath(xmlNode, _T("role"), 0);
				xId = xmlId != NULL ? mir_t2a(xmlGetText(xmlId)) : NULL;
				xRole = xmlRole != NULL ? mir_t2a(xmlGetText(xmlRole)) : NULL;
			}
			xmlDestroyNode(xml);
			
			CMStringA initiator = ParseUrl(xinitiator, "8:");
			CMStringA id = ParseUrl(xId, "8:");

			GCDEST gcd = { m_szModuleName, _A2T(chatname), !mir_strcmpi(xRole, "Admin") ? GC_EVENT_ADDSTATUS : GC_EVENT_REMOVESTATUS };
			GCEVENT gce = { sizeof(gce), &gcd };
			ptrT tszId(mir_a2t(id));
			ptrT tszRole(mir_a2t(xRole));
			ptrT tszInitiator(mir_a2t(initiator));
			gce.pDest = &gcd;
			gce.dwFlags = GCEF_ADDTOLOG;
			gce.ptszNick = tszId;
			gce.ptszUID = tszId;
			gce.ptszText = tszInitiator;
			gce.time = time(NULL);
			gce.bIsMe = IsMe(id);
			gce.ptszStatus = TranslateT("Admin");
			CallServiceSync(MS_GC_EVENT, 0, (LPARAM)&gce);
		}
	}
}
Exemple #17
0
//describe处理
int RTSP_describe(RTSP_buffer * pRtsp)
{
	char object[255], trash[255];
	char *p;
	unsigned short port;
	char s8Url[255];
	char s8Descr[MAX_DESCR_LENGTH];
	char server[128];
	char s8Str[128];

	/*根据收到的请求请求消息,跳过方法名,分离出URL*/
	if (!sscanf(pRtsp->in_buffer, " %*s %254s ", s8Url))
	{
		fprintf(stderr, "Error %s,%i\n", __FILE__, __LINE__);
		send_reply(400, 0, pRtsp);                			/* bad request */
		printf("get URL error");
		return ERR_NOERROR;
	}

	/*验证URL */
	switch (ParseUrl(s8Url, server, &port, object, sizeof(object)))
	{
		case 1: /*请求错误*/
			fprintf(stderr, "Error %s,%i\n", __FILE__, __LINE__);
			send_reply(400, 0, pRtsp);
			printf("url request error");
			return ERR_NOERROR;
			break;

		case -1: /*内部错误*/
			fprintf(stderr,"url error while parsing !\n");
			send_reply(500, 0, pRtsp);
			printf("inner error");
			return ERR_NOERROR;
			break;

		default:
			break;
	}

	/*取得序列号,并且必须有这个选项*/
	if ((p = strstr(pRtsp->in_buffer, HDR_CSEQ)) == NULL)
	{
		fprintf(stderr, "Error %s,%i\n", __FILE__, __LINE__);
		send_reply(400, 0, pRtsp);  /* Bad Request */
		printf("get serial num error");
		return ERR_NOERROR;
	}
	else
	{
		if (sscanf(p, "%254s %d", trash, &(pRtsp->rtsp_cseq)) != 2)
		{
			fprintf(stderr, "Error %s,%i\n", __FILE__, __LINE__);
			send_reply(400, 0, pRtsp);   /*请求错误*/
			printf("get serial num 2 error");
			return ERR_NOERROR;
		}
	}

	//获取SDP内容
	GetSdpDescr(pRtsp, s8Descr, s8Str);
	//发送Describe响应
	//printf("----------------1\r\n");
	SendDescribeReply(pRtsp, object, s8Descr, s8Str);
	//printf("2\r\n");
	return ERR_NOERROR;
}
/////////////////////////////////////////////////////////////////////////////
//
// [QueryCacheMissPolicy]
//
/////////////////////////////////////////////////////////////////////////////
HRESULT STDMETHODCALLTYPE 
CProxyPlugin::QueryCacheMissPolicy( BSTR bstrOriginUrl,
                                    IWMSContext *pUserContext,
                                    IWMSCommandContext *pCommandContext,
                                    IWMSContext *pPresentationContext,
                                    IUnknown *pCachePluginContext,
                                    long QueryType, 
                                    IWMSCacheProxyCallback *pCallback,
                                    VARIANT varContext
                                    )
{
    VARIANT varContext2;
    COpState *pOpState = NULL;
    HRESULT hr = S_OK;
    BOOL fRet;    

    if( ( NULL == bstrOriginUrl) ||
        ( NULL == pCommandContext ) ||
        ( NULL == pPresentationContext ) ||
        ( NULL == pCallback ) )
    {
        return( E_INVALIDARG );
    }

    if( QueryType & WMS_CACHE_QUERY_REVERSE_PROXY )
    {
        hr = pCallback->OnQueryCacheMissPolicy( S_OK,
                                                WMS_CACHE_QUERY_MISS_SKIP,
                                                NULL,
                                                NULL,
                                                NULL,
                                                varContext );
        return( hr );
    }

    if( ( QueryType & WMS_CACHE_QUERY_CACHE_EVENT ) || 
        ( QueryType & WMS_CACHE_QUERY_GET_CONTENT_INFO ) )
    {
        hr = pCallback->OnQueryCacheMissPolicy( S_OK,
                                                WMS_CACHE_QUERY_MISS_FORWARD_REQUEST,
                                                NULL,
                                                NULL,
                                                NULL,
                                                varContext );         
        return( hr );
    }

    pOpState = new COpState;
    if( NULL == pOpState )
    {
        return( E_OUTOFMEMORY );
    }

    pOpState->m_Op = COpState::OP_QUERY_CACHE_MISS_POLICY;
    pOpState->m_bstrOriginUrl = bstrOriginUrl;
    pOpState->m_pPresentationContext = pPresentationContext;
    pOpState->m_pCacheProxyCallback = pCallback;
    pOpState->m_varContext = varContext;

    pOpState->m_pPresentationContext->AddRef();
    pOpState->m_pCacheProxyCallback->AddRef();

    if( NULL == pOpState->m_bstrOriginUrl.m_str )
    {
        pOpState->Release();
        return( E_OUTOFMEMORY );
    }

    fRet = ParseUrl( bstrOriginUrl,
                     &pOpState->m_bstrProtocol,
                     &pOpState->m_bstrHost,
                     &pOpState->m_bstrPath,
                     &pOpState->m_wPort );

    if( !fRet )
    {
        pOpState->Release();
        return( E_FAIL );
    }
    
    // Initiate protocol rollover by calling OnGetContentInformation with an
    // appropriate HRESULT

    VariantInit( &varContext2 );
    V_VT( &varContext2 ) = VT_UNKNOWN;
    V_UNKNOWN( &varContext2 ) = (IUnknown *) pOpState;

    pOpState->m_dwProtocolIndex = -1;

    OnGetContentInformation( NS_E_CONNECTION_FAILURE, NULL, varContext2 );

    return( S_OK );
}
Exemple #19
0
NS_IMETHODIMP nsMailtoUrl::SetPath(const nsACString &aPath)
{
    m_baseURL->SetPath(aPath);
    return ParseUrl();
}
Exemple #20
0
NS_IMETHODIMP nsMailtoUrl::SetPassword(const nsACString &aPassword)
{
    m_baseURL->SetPassword(aPassword);
    return ParseUrl();
}
Exemple #21
0
NS_IMETHODIMP nsMailtoUrl::SetHost(const nsACString &aHost)
{
    m_baseURL->SetHost(aHost);
    return ParseUrl();
}
Exemple #22
0
NS_IMETHODIMP nsMailtoUrl::SetUserPass(const nsACString &aUserPass)
{
    m_baseURL->SetUserPass(aUserPass);
    return ParseUrl();
}
Exemple #23
0
NS_IMETHODIMP nsMailtoUrl::SetUsername(const nsACString &aUsername)
{
    m_baseURL->SetUsername(aUsername);
    return ParseUrl();
}
Exemple #24
0
NS_IMETHODIMP nsMailtoUrl::SetScheme(const nsACString &aScheme)
{
    m_baseURL->SetScheme(aScheme);
    return ParseUrl();
}
Exemple #25
0
bool AsyncDownload( char *Url, LPBYTE *lpBuffer, LPDWORD dwSize )
{
	char *Host = NULL;
	char *Path = NULL;
	int   Port = 0;

	if ( !ParseUrl( Url, &Host, &Path, &Port ) )
	{
		return false;
	}


	PASYNCHTTP pData = (PASYNCHTTP)MemAlloc( sizeof( PASYNCHTTP ) );

	if ( !pData )
	{
		return false;
	}

	pData->hConnectedEvent		 = pCreateEventW( NULL, FALSE, FALSE, NULL );
    pData->hRequestOpenedEvent	 = pCreateEventW( NULL, FALSE, FALSE, NULL );
    pData->hRequestCompleteEvent = pCreateEventW( NULL, FALSE, FALSE, NULL );

	char *UserAgent = (char*)MemAlloc( 1024 );

	DWORD dwUserSize = 1024;

	pObtainUserAgentString( 0, UserAgent, &dwUserSize );

	pData->hInstance = (HINTERNET)pInternetOpenA( UserAgent, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, INTERNET_FLAG_ASYNC );

	LPBYTE lpBuf	 = NULL;
	DWORD  dwBufSize = 0;

	if ( pData->hInstance )
	{
		if ( pInternetSetStatusCallback( pData->hInstance, (INTERNET_STATUS_CALLBACK)&Callback) != INTERNET_INVALID_STATUS_CALLBACK)
		{
			pData->dwCurrent = 1;
			pData->hConnect  = (HINTERNET)pInternetConnectA( pData->hInstance, Host, INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, (DWORD_PTR)pData );
			
			if ( !pData->hConnect )
			{
				if ( pGetLastError() != ERROR_IO_PENDING )
				{
					return false;
				}
				
				pWaitForSingleObject( pData->hConnectedEvent, INFINITE );
			}

			pData->dwCurrent = 2;
			pData->hRequest  = (HINTERNET)pHttpOpenRequestA( pData->hConnect, "GET", Path, NULL, NULL, NULL, INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_CACHE_WRITE, (DWORD_PTR)pData );

			if ( !pData->hRequest )
			{
				if ( pGetLastError() != ERROR_IO_PENDING )
				{
					return false;
				}

				pWaitForSingleObject( pData->hRequestOpenedEvent, INFINITE );
			}

			if ( !(BOOL)pHttpSendRequestA( pData->hRequest, NULL, 0, NULL, 0 ) )
			{
				if ( pGetLastError() != ERROR_IO_PENDING )
				{
					return false;
				}
			}

			pWaitForSingleObject( pData->hRequestCompleteEvent, INFINITE );

			LPBYTE pTmpBuf = (LPBYTE)MemAlloc( 4096 );

			if ( !pTmpBuf )
			{
				return false;
			}

			INTERNET_BUFFERSA ib;

			m_memset( &ib, 0, sizeof( INTERNET_BUFFERSA ) );
			
			ib.dwStructSize   = sizeof( INTERNET_BUFFERSA );
			ib.lpvBuffer	  = pTmpBuf;
			

			do
			{
				ib.dwBufferLength = 4096;

				if ( !(BOOL)pInternetReadFileExA( pData->hRequest, &ib, 0, 2 ) )
				{
					if ( pGetLastError() == ERROR_IO_PENDING)
					{
						pWaitForSingleObject( pData->hRequestCompleteEvent, INFINITE );
					}
					else
					{
						return false;
					}
				}

				if ( ib.dwBufferLength )
				{
					if ( !lpBuf )
					{
						if ( !( lpBuf = (LPBYTE)MemAlloc( ib.dwBufferLength + 1 ) ) )
						{
							return false;
						}
					}
					else
					{
						LPBYTE p = (LPBYTE)MemRealloc( lpBuf, dwBufSize + ib.dwBufferLength + 1 );

						if ( !p )
						{
							return false;
						}

						lpBuf = p;
					}

					m_memcpy( lpBuf + dwBufSize, pTmpBuf, ib.dwBufferLength );
					dwBufSize += ib.dwBufferLength;
				}
				else
				{
					pData->IsDownloaded = true;
				}

			} while ( !pData->IsDownloaded );
		}
	}

	pInternetCloseHandle( pData->hRequest  );
	pInternetCloseHandle( pData->hConnect  );
	pInternetCloseHandle( pData->hInstance );

	pCloseHandle( pData->hConnectedEvent       );
	pCloseHandle( pData->hRequestOpenedEvent   );
	pCloseHandle( pData->hRequestCompleteEvent );


	MemFree( pData );
	

	if ( dwSize )
	{
		*lpBuffer  = lpBuf;
		*dwSize    = dwBufSize;

		return true;
	}

	return false;
}
Exemple #26
0
/*
** Resolve a sequence of URLs.  Return the result in space obtained
** from malloc().
*/
char *ResolveUrl(
  char *zBase,              /* The base URL */
  const char **azSeries     /* A list of relatives.  NULL terminated */
){
  Url *base;
  Url *term;
  char *z;

  base = ParseUrl(zBase);
  while( azSeries[0] ){
    term = ParseUrl(azSeries[0]);
    azSeries++;
    if( term->zScheme==0 && term->zAuthority==0 && term->zPath==0
        && term->zQuery==0 && term->zFragment ){
      ReplaceStr(&base->zFragment, term->zFragment);
    }else if( term->zScheme ){
      Url temp;
      temp = *term;
      *term = *base;
      *base = temp;
    }else if( term->zAuthority ){
      ReplaceStr(&base->zAuthority, term->zAuthority);
      ReplaceStr(&base->zPath, term->zPath);
      ReplaceStr(&base->zQuery, term->zQuery);
      ReplaceStr(&base->zFragment, term->zFragment);
    }else if( term->zPath && term->zPath[0]=='/' ){
      ReplaceStr(&base->zPath, term->zPath);
      ReplaceStr(&base->zQuery, term->zQuery);
      ReplaceStr(&base->zFragment, term->zFragment);
    }else if( term->zPath && base->zPath ){
      char *zBuf;
      int i, j;
      zBuf = malloc( strlen(base->zPath) + strlen(term->zPath) + 2 );
      if( zBuf ){
        sprintf(zBuf,"%s", base->zPath);
        for(i=strlen(zBuf)-1; i>=0 && zBuf[i]!='/'; i--){ zBuf[i] = 0; }
        strcat(zBuf, term->zPath);
        for(i=0; zBuf[i]; i++){
          if( zBuf[i]=='/' && zBuf[i+1]=='.' && zBuf[i+2]=='/' ){
            strcpy(&zBuf[i+1], &zBuf[i+3]);
            i--;
            continue;
          }
          if( zBuf[i]=='/' && zBuf[i+1]=='.' && zBuf[i+2]==0 ){
            zBuf[i+1] = 0;
            continue;
          }
          if( i>0 && zBuf[i]=='/' && zBuf[i+1]=='.' && zBuf[i+2]=='.'
                 && (zBuf[i+3]=='/' || zBuf[i+3]==0) ){
            for(j=i-1; j>=0 && zBuf[j]!='/'; j--){}
            if( zBuf[i+3] ){
              strcpy(&zBuf[j+1], &zBuf[i+4]);
            }else{
              zBuf[j+1] = 0;
            }
            i = j-1;
            if( i<-1 ) i = -1;
            continue;
          }
        }
        free(base->zPath);
        base->zPath = zBuf;
      }   
      ReplaceStr(&base->zQuery, term->zQuery);
      ReplaceStr(&base->zFragment, term->zFragment);
    }
    FreeUrl(term);
  }
  z = BuildUrl(base);
  FreeUrl(base);
  return z;
}
Exemple #27
0
NS_IMETHODIMP nsMailtoUrl::SetSpec(const nsACString &aSpec)
{
  m_baseURL->SetSpec(aSpec);
	return ParseUrl();
}
Exemple #28
0
NS_IMETHODIMP nsMailtoUrl::SetPort(int32_t aPort)
{
    m_baseURL->SetPort(aPort);
    return ParseUrl();
}
Exemple #29
0
void CSkypeProto::ProcessEndpointPresence(const JSONNode &node)
{
	debugLogA("CSkypeProto::ProcessEndpointPresenceRes");
	std::string selfLink = node["selfLink"].as_string();
	CMStringA skypename(UrlToSkypename(selfLink.c_str()));

	MCONTACT hContact = FindContact(skypename);
	if (hContact == NULL)
		return;

	const JSONNode &publicInfo = node["publicInfo"];
	const JSONNode &privateInfo = node["privateInfo"];
	CMStringA MirVer;
	if (publicInfo)
	{
		std::string skypeNameVersion = publicInfo["skypeNameVersion"].as_string();
		std::string version = publicInfo["version"].as_string();
		std::string typ = publicInfo["typ"].as_string();
		int iTyp = atoi(typ.c_str());
		switch (iTyp)
		{
		case 0:
		case 1:
			MirVer.AppendFormat("Skype (Web) %s", ParseUrl(version.c_str(), "/"));
			break;
		case 10:
			MirVer.AppendFormat("Skype (XBOX) %s", ParseUrl(skypeNameVersion.c_str(), "/"));
			break;
		case 17:
			MirVer.AppendFormat("Skype (Android) %s", ParseUrl(skypeNameVersion.c_str(), "/"));
			break;
		case 16:
			MirVer.AppendFormat("Skype (iOS) %s", ParseUrl(skypeNameVersion.c_str(), "/"));
			break;
		case 12:
			MirVer.AppendFormat("Skype (WinRT) %s", ParseUrl(skypeNameVersion.c_str(), "/"));
			break;
		case 15:
			MirVer.AppendFormat("Skype (WP) %s", ParseUrl(skypeNameVersion.c_str(), "/"));
			break;
		case 13:
			MirVer.AppendFormat("Skype (OSX) %s", ParseUrl(skypeNameVersion.c_str(), "/"));
				break;
		case 11:
			MirVer.AppendFormat("Skype (Windows) %s", ParseUrl(skypeNameVersion.c_str(), "/"));
			break;
		case 14:
			MirVer.AppendFormat("Skype (Linux) %s", ParseUrl(skypeNameVersion.c_str(), "/"));
			break;
		case 125:
			MirVer.AppendFormat("Miranda NG Skype %s", version.c_str());
			break;
		default:
				MirVer.Append("Skype (Unknown)");
		}
	}
	if (privateInfo != NULL)
	{
		std::string epname = privateInfo["epname"].as_string();
		if (!epname.empty())
		{
			MirVer.AppendFormat(" [%s]", epname.c_str());
		}
	}
	db_set_s(hContact, m_szModuleName, "MirVer", MirVer);
}
Exemple #30
0
NS_IMETHODIMP
nsAddbookUrl::SetRef(const nsACString &aRef)
{
  m_baseURL->SetRef(aRef);
  return ParseUrl();
}