NS_IMETHODIMP
nsChromeProtocolHandler::NewURI(const nsACString &aSpec,
                                const char *aCharset,
                                nsIURI *aBaseURI,
                                nsIURI **result)
{
    nsresult rv;

    // Chrome: URLs (currently) have no additional structure beyond that provided
    // by standard URLs, so there is no "outer" given to CreateInstance

    nsCOMPtr<nsIStandardURL> surl(do_CreateInstance(NS_STANDARDURL_CONTRACTID, &rv));
    NS_ENSURE_SUCCESS(rv, rv);

    rv = surl->Init(nsIStandardURL::URLTYPE_STANDARD, -1, aSpec, aCharset, aBaseURI);
    if (NS_FAILED(rv))
        return rv;

    nsCOMPtr<nsIURL> url(do_QueryInterface(surl, &rv));
    NS_ENSURE_SUCCESS(rv, rv);

    // Canonify the "chrome:" URL; e.g., so that we collapse
    // "chrome://navigator/content/" and "chrome://navigator/content"
    // and "chrome://navigator/content/navigator.xul".

    rv = nsChromeRegistry::Canonify(url);
    if (NS_FAILED(rv))
        return rv;

    surl->SetMutable(false);

    NS_ADDREF(*result = url);
    return NS_OK;
}
예제 #2
0
void Http::findAllUrl(const char* str, std::unordered_set<std::string>& visitedUrl) {
	if (str == NULL) {
		return;
	}

	const char* tag = "href=\"";
	const char* pos = strstr(str, tag);
	size_t tagsize = strlen(tag);

	while (pos) {
		pos += tagsize;
		if (pos == NULL) {
			std::cout << "NULL" << std::endl;
			break;
		}
		const char* next = strstr(pos, "\"");
		if (next) {
			char* url = new char[next - pos + 1];
			memset(url, 0, next - pos + 1);
			memcpy(url, pos, next - pos);
			strlwr(url);
			std::string surl(url);
			addUrl(surl, visitedUrl);
			delete[] url;
		}
		pos = strstr(pos, tag);
	}
}
예제 #3
0
int file_request(
    void *cls,
    struct MHD_Connection *connection,
    const char *url,
    const char *method,
    const char *version,
    const char *upload_data,
    size_t *upload_data_size,
    void **con_cls)
{
  static int aptr;
  struct MHD_Response *response;
  int ret;
  FILE *file;
  struct stat buf;

  if (0 != strcmp(method, MHD_HTTP_METHOD_GET)) {
    return MHD_NO;              /* unexpected method */
  }
  if (&aptr != *con_cls) {
    /* do never respond on first call */
    *con_cls = &aptr;
    return MHD_YES;
  }
  *con_cls = NULL;                  /* reset when done */

  std::string surl(&url[1]);
  const char* filepath = (path + surl).c_str();

  if (0 == stat(filepath, &buf)) {
    file = fopen(filepath, "rb");
  } else {
    file = NULL;
  }
  if (file == NULL) {
    response = MHD_create_response_from_buffer(strlen(filepath),
        (void *)filepath,
        MHD_RESPMEM_PERSISTENT);
    ret = MHD_queue_response(connection, MHD_HTTP_NOT_FOUND, response);
    MHD_destroy_response(response);
  } else {
    /* 32k page size */
    response = MHD_create_response_from_callback(
        buf.st_size,
        32 * 1024,
        &file_reader,
        file,
        &free_callback);
    if (response == NULL) {
      fclose(file);
      return MHD_NO;
    }
    ret = MHD_queue_response(connection, MHD_HTTP_OK, response);
    MHD_destroy_response(response);
  }
  return ret;
}
예제 #4
0
NS_IMETHODIMP
AppProtocolHandler::NewURI(const nsACString &aSpec,
                           const char *aCharset, // ignore charset info
                           nsIURI *aBaseURI,
                           nsIURI **result)
{
    nsresult rv;
    nsCOMPtr<nsIStandardURL> surl(do_CreateInstance(NS_STANDARDURL_CONTRACTID, &rv));
    NS_ENSURE_SUCCESS(rv, rv);

    rv = surl->Init(nsIStandardURL::URLTYPE_STANDARD, -1, aSpec, aCharset, aBaseURI);
    NS_ENSURE_SUCCESS(rv, rv);

    nsCOMPtr<nsIURL> url(do_QueryInterface(surl, &rv));
    NS_ENSURE_SUCCESS(rv, rv);

    url.forget(result);
    return NS_OK;
}
예제 #5
0
void storm::BolStatusRequest::loadFromDB(struct srm_dbfd* db){

    srmlogit(STORM_LOG_DEBUG, "storm::BolStatusRequest::loadFromDB", "R_token: %s\n",  m_requestToken.c_str());

    std::string query("");
    if(m_surls.size() > 0)
    {
    	query += "SELECT r.client_dn, r.status, r.errstring, r.remainingTotalTime, "
    			" c.sourceSURL , s.fileSize , s.estimatedWaitTime , "
    			" s.remainingPinTime , s.statusCode , s.explanation"
    			" FROM request_queue r JOIN (request_BoL c, status_BoL s) ON "
    			"(c.request_queueID=r.ID AND s.request_BoLID=c.ID) "
    			"WHERE r.r_token=" + sqlFormat(m_requestToken) + " and c.sourceSURL in (";
		bool first = true;
		std::set<SurlPtr>::const_iterator const vectorEnd = m_surls.end();
		for (std::set<SurlPtr>::const_iterator i = m_surls.begin(); i != vectorEnd; ++i) {
			Surl* current = i->get();
			if(first)
			{
				first = false;
			}
			else
			{
				query += " , ";
			}
			query += sqlFormat(current->getSurl());
		}
		query += ")";
    }
    else
    {
		query += "SELECT r.client_dn, r.status, r.errstring, r.remainingTotalTime, "
    			" c.sourceSURL , s.fileSize , s.estimatedWaitTime , "
    			" s.remainingPinTime , s.statusCode , s.explanation"
    			" FROM request_queue r JOIN (request_BoL c, status_BoL s) ON "
    			"(c.request_queueID=r.ID AND s.request_BoLID=c.ID) "
    			"WHERE r.r_token=" + sqlFormat(m_requestToken);
    }
    file_status_results_t results;
    storm_db::vector_exec_query(db, query, results);
	if (results.size() == 0)
	{
		if(m_surls.size() > 0)
		{
			srmlogit(STORM_LOG_INFO, "storm::BolStatusRequest::loadFromDB()",
									 "No tokens found for token %s and the requested SURLs\n", m_requestToken.c_str());
			throw storm::token_not_found("No request found for token " + m_requestToken + " and the requested SURLs\n");
		}
		else
		{
			srmlogit(STORM_LOG_INFO, "storm::BolStatusRequest::loadFromDB()",
									 "No tokens found for token %s\n", m_requestToken.c_str());
			throw storm::token_not_found("No request found for token " + m_requestToken + "\n");
		}

	}
	fillCommonFields(results);

	std::vector<file_status_result_t>::const_iterator const vectorEnd = results.end();
	for (std::vector<file_status_result_t>::const_iterator i = results.begin(); i != vectorEnd; ++i) {
		file_status_result_t currentResutl = *i;
		storm::Surl surl(currentResutl["sourceSURL"].c_str());
		BolTurl* turl;
		if(currentResutl["fileSize"].empty())
		{
			turl = new BolTurl(surl);
		}
		else
		{
			turl = new BolTurl(surl, strtoull(currentResutl["fileSize"].c_str(),(char**)NULL,10));
		}
		if(currentResutl["statusCode"].empty())
		{
			srmlogit(STORM_LOG_ERROR, "storm::BolStatusRequest::loadFromDB()",
			                 "Error,status code for SURL %s is empty. Continuing without filling SURLs informations.\n", currentResutl["targetSURL"].c_str());
			delete turl;
			continue;
		}
		turl->setStatus(static_cast<ns1__TStatusCode>(atoi(currentResutl["statusCode"].c_str())));
		turl->setExplanation(currentResutl["explanation"]);
		if(!currentResutl["estimatedWaitTime"].empty())
		{
			turl->setEstimatedWaitTime(atoi(currentResutl["estimatedWaitTime"].c_str()));
		}
		if(!currentResutl["remainingPinTime"].empty())
		{
			turl->setRemainingPinLifetime(atoi(currentResutl["remainingPinTime"].c_str()));
		}
		m_turls.insert(TurlPtr(turl));
	}
}
예제 #6
0
void openFile(std::string path)
{
	bool isAbs = true;
	QString surl("file://");

#if defined(Q_OS_WIN)
	/* check that it is an absolute path */
	if (path.size() < 4)
	{
		std::cerr << "[WIN] openPath() Very Small path ignoring: " << path;
		std::cerr << std::endl;
		return;
	}

	if ((path[1] == ':') && ((path[2] == '\\') || (path[2] == '/')))
	{
		isAbs = true;
	}
#else

	/* check that it is an absolute path */
	if (path.size() < 1)
	{
		std::cerr << "[UNIX] openPath() Very Small path ignoring: " << path;
		std::cerr << std::endl;
		return;
	}

	if (path[0] == '/')
	{
		isAbs = true;
	}
#endif

	if (!isAbs)
	{

#define ROOT_PATH_SIZE 1024

		char rootdir[ROOT_PATH_SIZE];
		if (NULL == getcwd(rootdir, ROOT_PATH_SIZE))
		{
			std::cerr << "openPath() get Abs Failed: " << path;
			std::cerr << std::endl;
			return;
		}

		std::string rdir(rootdir);
		surl += QString::fromStdString(rdir);
		surl += '/';
	}

	surl += QString::fromStdString(path);
	std::cerr << "openPath() opening AbsPath Url: " << surl.toStdString();
	std::cerr << std::endl;

	QUrl url(surl);
	QDesktopServices::openUrl(url);

	return;
}