Example #1
0
/*
	CIcy()
*/
CIcy::CIcy(LPCSTR pUrl /*= NULL*/,int nPort /*= HTTP_DEFAULT_PORT*/)
{
	Reset();

	m_nPort = nPort;
	if(pUrl)
	{
		URL url;
		SplitUrl(pUrl,&url);
		strcpyn(m_szHost,StripUrlType(url.host),sizeof(m_szHost));
		if(!strnull(url.dir))
			strcpyn(m_szDir,url.dir,sizeof(m_szDir));
		if(!strnull(url.file))
			strcpyn(m_szFile,url.file,sizeof(m_szFile));
		m_nPort = url.port;
	}
	if(m_nPort <= 0)
		m_nPort = HTTP_DEFAULT_PORT;
}
Example #2
0
LRESULT
SiteWizRemote::FillList (/*[in]*/ WPARAM	wParam,
			 /*[in]*/ LPARAM	lParam)
{
  UNUSED_ALWAYS (wParam);
  UNUSED_ALWAYS (lParam);

  CPropertySheet * pSheet = reinterpret_cast<CPropertySheet*>(GetParent());
  ASSERT_KINDOF (CPropertySheet, pSheet);

  try
    {
      if (! listControl.DeleteAllItems())
	{
	  FATAL_WINDOWS_ERROR ("CListCtrl::DeleteAllItems", 0);
	}
      
      bool selected = false;
      
      string url;

      if (! pManager->TryGetRemotePackageRepository(url))
	{
	  url = "";
	}

      int idx = 0;
      
      for (vector<RepositoryInfo>::const_iterator it = repositories.begin();
	   it != repositories.end();
	   ++ it, ++ idx)
	{
#if MIKTEX_RELEASE_STATE < 4
	  if (it->packageLevel == PackageLevel::None)
	    {
	      continue;
	    }
#endif
	  
	  LV_ITEM lvitem;
	  
	  lvitem.iItem = idx;
	  lvitem.mask = LVIF_PARAM;
	  lvitem.lParam = idx;
	  lvitem.iSubItem = 0;
      
	  if (listControl.InsertItem(&lvitem) < 0)
	    {
	      FATAL_WINDOWS_ERROR ("CListCtrl::InsertItem", 0);
	    }

	  string protocol;
	  string host;

	  SplitUrl (it->url, protocol, host);

	  SetItemText (idx, 0, it->country.c_str());
	  CString protUC (protocol.c_str());
	  protUC.MakeUpper ();
	  SetItemText (idx, 1, TU_(protUC));
	  SetItemText (idx, 2, host.c_str());
      	  SetItemText (idx, 3, TU_(CTime(it->timeDate).Format(_T("%d-%b-%y"))));
	  SetItemText (idx, 4, it->description.c_str());

	  if (it->url == url)
	    {
	      if (! listControl.SetItemState(idx,
					     LVIS_SELECTED,
					     LVIS_SELECTED))
		{
		  FATAL_WINDOWS_ERROR ("CListCtrl::SetItemState", 0);
		}
	      selected = true;
	    }
	}

      pSheet->SetWizardButtons (PSWIZB_BACK
				| (selected ? PSWIZB_FINISH : 0));
    }
  catch (const MiKTeXException & e)
    {
      ErrorDialog::DoModal (this, e);
    }
  catch (const exception & e)
    {
      ErrorDialog::DoModal (this, e);
    }

  return (0);
}
LRESULT
RemoteRepositoryPage::OnFillList (/*[in]*/ WPARAM		wParam,
				  /*[in]*/ LPARAM		lParam)
{
  UNUSED_ALWAYS (wParam);
  UNUSED_ALWAYS (lParam);

  try
    {
      if (pSheet->GetCancelFlag() || pSheet->GetErrorFlag())
	{
	  SetProgressText (pSheet->GetCancelFlag()
			   ? T_("Cancelled")
			   : T_("Unsuccessful"));
	  pSheet->EnableCloseButton ();
	  return (0);
	}

      if (! listControl.DeleteAllItems())
	{
	  FATAL_WINDOWS_ERROR ("CListCtrl::DeleteAllItems", 0);
	}
      
      bool selected = false;

      int idx = 0;

      for (vector<RepositoryInfo>::const_iterator it = repositories.begin();
	   it != repositories.end();
	   ++ it, ++ idx)
	{
#if MIKTEX_RELEASE_STATE < 4
	  if (it->packageLevel < theApp.GetPackageLevel())
	    {
	      continue;
	    }
#endif

	  LV_ITEM lvitem;
	  
	  lvitem.iItem = idx;
	  lvitem.mask = LVIF_PARAM;
	  lvitem.lParam = idx;
	  lvitem.iSubItem = 0;
	  
	  if (listControl.InsertItem(&lvitem) < 0)
	    {
	      FATAL_WINDOWS_ERROR ("CListCtrl::InsertItem", 0);
	    }

	  string protocol;
	  string host;

	  SplitUrl (it->url, protocol, host);

	  SetItemText (idx, 0, it->country.c_str());
	  CStringW protUC = UW_(protocol.c_str());
	  protUC.MakeUpper ();
	  SetItemText (idx, 1, WU_(protUC));
	  SetItemText (idx, 2, host.c_str());
      	  SetItemText (idx, 3, TU_(CTime(it->timeDate).Format(_T("%d-%b-%y"))));
#if SHOW_DESCRIPTION
	  SetItemText (idx, 4, it->description.c_str());
#endif

	  if (it->url == theApp.GetRemotePackageRepository())
	    {
	      if (! listControl.SetItemState(idx,
					     LVIS_SELECTED,
					     LVIS_SELECTED))
		{
		  FATAL_WINDOWS_ERROR ("CListCtrl::SetItemState", 0);
		}
	      selected = true;
	    }
	}

      pSheet->SetWizardButtons (PSWIZB_BACK
				| (selected ? PSWIZB_NEXT : 0));
    }
  catch (const MiKTeXException & e)
    {
      pSheet->ReportError (e);
    }
  catch (const exception & e)
    {
      pSheet->ReportError (e);
    }
  
  return (0);
}
Example #4
0
/*
	Open()
*/
SOCKET CIcy::Open(LPCSTR pUrl/* = NULL*/,int nPort/* = HTTP_DEFAULT_PORT*/,int icydata/* = 1*/)
{
	// per evitare la ricorsione infinita sui codici 301/302
	static int nRecurse = 0;
	
	// chiude il socket
	Close();
	
	// resetta i codice d'errore
	m_nResponse = 0;
	m_dwLastError = 0L;
	memset(m_szLastError,'\0',sizeof(m_szLastError));
	CSock::SetWSALastError(0);

	// resetta e normalizza l'url
	memset(m_szUrl,'\0',sizeof(m_szUrl));
	memset(m_szHost,'\0',sizeof(m_szHost));
	strcpy(m_szDir,"/");
	memset(m_szFile,'\0',sizeof(m_szFile));
	m_nPort = nPort;
	if(pUrl)
	{
		URL url;
		SplitUrl(pUrl,&url);
		strcpyn(m_szHost,StripUrlType(url.host),sizeof(m_szHost));
		if(strcmp("",url.dir)!=0)
			strcpyn(m_szDir,url.dir,sizeof(m_szDir));
		if(strcmp("",url.file)!=0)
			strcpyn(m_szFile,url.file,sizeof(m_szFile));
		m_nPort = url.port;
	}
	if(m_nPort <= 0)
		m_nPort = HTTP_DEFAULT_PORT;
	
	// apre il socket
	if(CSock::Open(AF_INET,SOCK_STREAM))
	{
		// si collega all'host
		BOOL bConnected = FALSE;
		
		if(GetProxyAddress() && GetProxyPortNumber() > 0)
			bConnected = CSock::Connect(GetProxyAddress(),GetProxyPortNumber());
		else
			bConnected = CSock::Connect(m_szHost,m_nPort);

		if(bConnected)
		{
			// costruisce la richiesta
			char szBuffer[4096];
			int n = 0;
			
			if(GetProxyAddress() && GetProxyPortNumber() > 0)
				n += _snprintf(szBuffer,sizeof(szBuffer)-1,"GET http://%s:%ld%s%s HTTP/1.0\r\n",m_szHost,m_nPort,m_szDir,m_szFile);
			else
				n += _snprintf(szBuffer,sizeof(szBuffer)-1,"GET %s%s HTTP/1.0\r\n",m_szDir,m_szFile);
			
			if(strcmp(GetProxyAuth(),"")!=0)
			{
				n += _snprintf(szBuffer+n,
							sizeof(szBuffer) - (1 + n),
							"Proxy-Authorization: Basic %s\r\n",
							GetProxyAuth()
							);
			}

			if(m_szUserAgent[0]!='\0' && n > 0)
				n += _snprintf(szBuffer+n,sizeof(szBuffer)-1-n,"Host: %s:%ld\r\nAccept: *.*, */*\r\nUser-Agent: %s\r\n",m_szHost,m_nPort,m_szUserAgent);
			if(icydata==1 && n > 0)
				n += _snprintf(szBuffer+n,sizeof(szBuffer)-1-n,"Icy-Metadata: 1\r\n");
			if(n > 0)
				n = _snprintf(szBuffer+n,sizeof(szBuffer)-1-n,"\r\n");
			
			// invia
			TRACEEXPR((_TRACE_FLAG_INFO,__NOFILE__,__NOLINE__,"CIcy::Open(): Send():\n[%s]\n",szBuffer));
			if((n = CSock::Send(szBuffer,strlen(szBuffer)))!=SOCKET_ERROR)
			{
				// Send() e Receive() a raffica scasinano, sopratutto con ICY
				::Sleep((DWORD)CSock::GetDelay());
				
				// riceve
				if((n = CSock::Receive(szBuffer,sizeof(szBuffer)-1))!=SOCKET_ERROR)
				{
					TRACEEXPR((_TRACE_FLAG_INFO,__NOFILE__,__NOLINE__,"CIcy::Open(): Receive():\n[%s]\n",szBuffer));
					
					// carica i campi dell'header
					if((m_nResponse = ParseHeader(szBuffer))==ICY_CODE_OK)
					{
						m_Socket = CSock::GetHandle();
						
						char* p = strstr(szBuffer,"\r\n\r\n");
						if(p)
						{
							// il primo blocco di dati arriva insieme all'header
							p+=4;
							int tot = n - (p-szBuffer);
							memcpy(m_szFirstChunk,p,tot);
							m_nFirstChunkLen = tot;
							
							/*CBinFile binFile;
							if(binFile.Create("chunk.dat"))
							{
								binFile.Write(m_szFirstChunk,tot);
								binFile.Close();
							}*/
						}
					}
					else
					{
						switch(m_nResponse)
						{
							case HTTP_CODE_MOVED_PERMANENTLY:
							case HTTP_CODE_MOVED_TEMPORARILY:
								if(++nRecurse > 2)
								{
									nRecurse = 0;
									break;
								}
								else
									return(CIcy::Open(m_szLocation));
							default:
								break;
						}
					}
				}
			}
		}
	}

	return(m_Socket);
}