コード例 #1
0
SoupSession *
open_app_soup_session_new (gboolean sync, gchar *cafile)
{
	SoupSession *session;

	if (sync) {
		session = soup_session_sync_new_with_options (
			SOUP_SESSION_SSL_CA_FILE, cafile,
#ifdef HAVE_GNOME
			SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_GNOME_FEATURES_2_26,
#endif
			SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_CONTENT_DECODER,
			SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_COOKIE_JAR,
			SOUP_SESSION_USER_AGENT, "get ",
			SOUP_SESSION_ACCEPT_LANGUAGE_AUTO, TRUE,
			NULL);
	} else {
		session = soup_session_async_new_with_options (
			SOUP_SESSION_SSL_CA_FILE, cafile,
#ifdef HAVE_GNOME
			SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_GNOME_FEATURES_2_26,
#endif
			SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_CONTENT_DECODER,
			SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_COOKIE_JAR,
			SOUP_SESSION_USER_AGENT, "get ",
			SOUP_SESSION_ACCEPT_LANGUAGE_AUTO, TRUE,
			NULL);
	}

	return session;
}
コード例 #2
0
static GByteArray *
idol_pl_parser_load_http_itunes (const char *uri)
{
	SoupMessage *msg;
	SoupSession *session;
	GByteArray *data;

	session = soup_session_sync_new_with_options (
	    SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_GNOME_FEATURES_2_26,
	    SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_CONTENT_DECODER,
	    SOUP_SESSION_USER_AGENT, "iTunes/7.4.1",
	    SOUP_SESSION_ACCEPT_LANGUAGE_AUTO, TRUE,
	    NULL);

	msg = soup_message_new (SOUP_METHOD_GET, uri);
	soup_session_send_message (session, msg);
	if (SOUP_STATUS_IS_SUCCESSFUL (msg->status_code)) {
		data = g_byte_array_new ();
		g_byte_array_append (data,
				     (guchar *) msg->response_body->data,
				     msg->response_body->length);
	} else {
		return NULL;
	}
	g_object_unref (msg);
	g_object_unref (session);

	return data;
}
コード例 #3
0
/**
 * as_app_validate_setup_networking:
 **/
static gboolean
as_app_validate_setup_networking (AsAppValidateHelper *helper, GError **error)
{
	helper->session = soup_session_sync_new_with_options (SOUP_SESSION_USER_AGENT,
							      "libappstream-glib",
							      SOUP_SESSION_TIMEOUT,
							      5000,
							      NULL);
	if (helper->session == NULL) {
		g_set_error_literal (error,
				     AS_APP_ERROR,
				     AS_APP_ERROR_FAILED,
				     "Failed to set up networking");
		return FALSE;
	}
	soup_session_add_feature_by_type (helper->session,
					  SOUP_TYPE_PROXY_RESOLVER_DEFAULT);
	return TRUE;
}
コード例 #4
0
int
main (int argc, char **argv)
{
  MinCloudAgentApp selfstruct = { 0, };
  MinCloudAgentApp *self = &selfstruct;
  GCancellable *cancellable = NULL;
  const char *src_address;
  guint srcport = 80;

  g_setenv ("GIO_USE_VFS", "local", TRUE);

  if (!prepare_root_ssh (cancellable, &self->error))
    goto out;

  src_address = g_getenv ("MIN_CLOUDAGENT_ADDRESS");
  if (!src_address)
    src_address = "169.254.169.254";

  {
    const char *srcport_str = g_getenv ("MIN_CLOUDAGENT_PORT");
    if (srcport_str)
      srcport = (guint) g_ascii_strtoull (srcport_str, NULL, 10);
  }

  self->addr = g_inet_address_new_from_string (src_address);
  self->addr_port = (GInetSocketAddress*)g_inet_socket_address_new (self->addr, srcport);
  self->netmon = g_network_monitor_get_default ();
  self->cancellable = cancellable;
  self->running = TRUE;
  self->session = soup_session_sync_new_with_options (SOUP_SESSION_USER_AGENT, "min-cloud-agent",
                                                      SOUP_SESSION_SSL_USE_SYSTEM_CA_FILE, TRUE,
                                                      SOUP_SESSION_USE_THREAD_CONTEXT, TRUE,
                                                       NULL);
  self->authorized_keys_path = g_file_new_for_path ("/root/.ssh/authorized_keys");
  self->userdata_done_stamp = g_file_new_for_path (MIN_CLOUD_AGENT_STATEDIR "/userdata.stamp");
  self->done_stamp = g_file_new_for_path (MIN_CLOUD_AGENT_STATEDIR "/done.stamp");

  if (g_file_query_exists (self->done_stamp, NULL))
    goto out;

  g_signal_connect (self->netmon, "network-changed",
                   G_CALLBACK (on_network_changed),
                   self);
  recheck_metadata_reachability (self);

  while (self->running && self->error == NULL)
    g_main_context_iteration (NULL, TRUE);
  if (self->error)
    goto out;

  if (!g_file_replace_contents (self->done_stamp, "done\n", 5,
                                NULL, FALSE, 0,
                                NULL, cancellable, &self->error))
    goto out;

 out:
  if (self->error)
    {
      g_printerr ("error: %s\n", self->error->message);
      return 1;
    }
  return 0;
}
コード例 #5
0
ファイル: gvfsbackendhttp.c プロジェクト: DarkProfit/gvfs
static void
g_vfs_backend_http_init (GVfsBackendHttp *backend)
{
  const char         *debug;
  SoupSessionFeature *proxy_resolver;
  SoupSessionFeature *cookie_jar;
  SoupSessionFeature *content_decoder;

  g_vfs_backend_set_user_visible (G_VFS_BACKEND (backend), FALSE);  

  backend->session = soup_session_sync_new_with_options ("user-agent",
                                                         "gvfs/" VERSION,
                                                         NULL);

  backend->session_async = soup_session_async_new_with_options ("user-agent",
                                                                "gvfs/" VERSION,
                                                                NULL);
  /* SoupRequester seems to depend on use-thread-context */
  g_object_set (G_OBJECT (backend->session_async), "use-thread-context", TRUE, NULL);

  /* Proxy handling */
  proxy_resolver = g_object_new (SOUP_TYPE_PROXY_RESOLVER_GNOME, NULL);
  soup_session_add_feature (backend->session, proxy_resolver);
  soup_session_add_feature (backend->session_async, proxy_resolver);
  g_object_unref (proxy_resolver);

  /* Cookie handling - stored temporarlly in memory, mostly useful for
   * authentication in WebDAV. */
  cookie_jar = g_object_new (SOUP_TYPE_COOKIE_JAR, NULL);
  soup_session_add_feature (backend->session, cookie_jar);
  soup_session_add_feature (backend->session_async, cookie_jar);
  g_object_unref (cookie_jar);

  /* Send Accept-Language header (see bug 166795) */
  g_object_set (backend->session, "accept-language-auto", TRUE, NULL);
  g_object_set (backend->session_async, "accept-language-auto", TRUE, NULL);

  /* Handle decompression automatically */
  content_decoder = g_object_new (SOUP_TYPE_CONTENT_DECODER, NULL);
  soup_session_add_feature (backend->session, content_decoder);
  soup_session_add_feature (backend->session_async, content_decoder);
  g_object_unref (content_decoder);

  /* Request API */
  soup_session_add_feature_by_type (backend->session, SOUP_TYPE_REQUESTER);
  soup_session_add_feature_by_type (backend->session_async, SOUP_TYPE_REQUESTER);

  /* Logging */
  debug = g_getenv ("GVFS_HTTP_DEBUG");
  if (debug)
    {
      SoupLogger         *logger;
      SoupLoggerLogLevel  level;

      if (g_ascii_strcasecmp (debug, "all") ||
          g_ascii_strcasecmp (debug, "body"))
        level = SOUP_LOGGER_LOG_BODY;
      else if (g_ascii_strcasecmp (debug, "header"))
        level = SOUP_LOGGER_LOG_HEADERS;
      else
        level = SOUP_LOGGER_LOG_MINIMAL;

      logger = soup_logger_new (level, DEBUG_MAX_BODY_SIZE);
      soup_session_add_feature (backend->session, SOUP_SESSION_FEATURE (logger));
      soup_session_add_feature (backend->session_async, SOUP_SESSION_FEATURE (logger));
      g_object_unref (logger);
    }

}
コード例 #6
0
ファイル: network-soup.c プロジェクト: UIKit0/evolution-rss
gboolean
net_queue_dispatcher(void)
{
	STNET *_stnet;
	guint qlen = g_queue_get_length(rf->stqueue);

	d("que len:%d workers:%d\n",
		g_queue_get_length(rf->stqueue),
		net_queue_run_count);

#if EVOLUTION_VERSION < 30304
	if (qlen && net_queue_run_count < gconf_client_get_int (
						rss_gconf,
						GCONF_KEY_DOWNLOAD_QUEUE_SIZE,
						NULL)) {
#else
	if (qlen && net_queue_run_count < g_settings_get_int (
						settings,
						CONF_DOWNLOAD_QUEUE_SIZE)) {
#endif
		net_queue_run_count++;
		_stnet = g_queue_pop_head(rf->stqueue);
		soup_session_queue_message (
			_stnet->ss,
			_stnet->sm,
			_stnet->cb2,
			_stnet->cbdata2);
		g_free(_stnet);
		return TRUE;
	}
	net_qid = 0;
	return FALSE;
}

GString*
net_post_blocking(gchar *url,
	GSList *headers,
	GString *post,
	NetStatusCallback cb,
	gpointer data,
	GError **err) {
#if LIBSOUP_VERSION < 2003000
	SoupUri *suri = NULL;
#else
	SoupURI *suri = NULL;
#endif
	SoupMessage *req = NULL;
	GString *response = NULL;
	CallbackInfo info = { cb, data, 0, 0 };
	SoupSession *soup_sess = NULL;
	gchar *agstr;

	if (!rf->b_session)
		rf->b_session = soup_sess =
			soup_session_sync_new_with_options(
				SOUP_SESSION_TIMEOUT,
				SS_TIMEOUT,
				NULL);
	else
		soup_sess = rf->b_session;


	g_signal_connect (soup_sess,
		"authenticate",
		G_CALLBACK (authenticate),
		(gpointer)url);
#if LIBSOUP_VERSION < 2003000
	g_signal_connect (soup_sess,
		"reauthenticate",
		G_CALLBACK (reauthenticate),
		(gpointer)url);
#endif

	req = soup_message_new(SOUP_METHOD_GET, url);
	if (!req) {
		g_set_error(err, NET_ERROR, NET_ERROR_GENERIC, "%s",
				soup_status_get_phrase(2));			//invalid url
		goto out;
	}
	d("request ok :%d\n", req->status_code);
	g_signal_connect(G_OBJECT(req), "got-chunk",
			G_CALLBACK(got_chunk_blocking_cb), &info);
	for (; headers; headers = headers->next) {
		char *header = headers->data;
		/* soup wants the key and value separate, so we have to munge this
		 * a bit. */
		char *colonpos = strchr(header, ':');
		*colonpos = 0;
#if LIBSOUP_VERSION < 2003000
		soup_message_add_header(
			req->request_headers,
			header,
			colonpos+1);
#else
		soup_message_headers_append(
			req->request_headers, header, colonpos+1);
#endif
		*colonpos = ':';
	}
	agstr = g_strdup_printf("Evolution/%s; Evolution-RSS/%s",
			EVOLUTION_VERSION_STRING, VERSION);
#if LIBSOUP_VERSION < 2003000
	soup_message_add_header (
		req->request_headers,
		"User-Agent",
		agstr);
#else
	soup_message_headers_append (
		req->request_headers,
		"User-Agent",
		agstr);
#endif
	g_free(agstr);

#if (DATASERVER_VERSION >= 2023001)
	proxify_session(proxy, soup_sess, url);
#endif
	rf->b_session = soup_sess;
	rf->b_msg_session = req;
	soup_session_send_message(soup_sess, req);

	if (req->status_code != SOUP_STATUS_OK) {
		//might not be a good ideea
		soup_session_abort(soup_sess);
		g_object_unref(soup_sess);
		rf->b_session = NULL;
		g_set_error(err, NET_ERROR, NET_ERROR_GENERIC, "%s",
				soup_status_get_phrase(req->status_code));
		goto out;
	}

#if LIBSOUP_VERSION < 2003000
	response = g_string_new_len(
			req->response.body,
			req->response.length);
#else
	response = g_string_new_len(
			req->response_body->data,
			req->response_body->length);
#endif

out:
	if (suri) soup_uri_free(suri);
	if (req) g_object_unref(G_OBJECT(req));

	return response;
}
コード例 #7
0
ファイル: network-soup.c プロジェクト: UIKit0/evolution-rss
guint
net_get_status(const char *url, GError **err)
{
#if LIBSOUP_VERSION < 2003000
	SoupUri *suri = NULL;
#else
	SoupURI *suri = NULL;
#endif
	SoupMessage *req = NULL;
	guint response = 0;
	SoupSession *soup_sess = NULL;
	GSList *headers = NULL;
	gchar *agstr;

	if (!rf->b_session)
		rf->b_session = soup_sess =
			soup_session_sync_new_with_options(
				SOUP_SESSION_TIMEOUT, SS_TIMEOUT, NULL);
	else
		soup_sess = rf->b_session;

	req = soup_message_new(SOUP_METHOD_GET, url);
	if (!req) {
		g_set_error(err, NET_ERROR, NET_ERROR_GENERIC, "%s",
				soup_status_get_phrase(2));			//invalid url
		goto out;
	}
	for (; headers; headers = headers->next) {
		char *header = headers->data;
		/* soup wants the key and value separate, so we have to munge this
		 * a bit. */
		char *colonpos = strchr(header, ':');
		*colonpos = 0;
#if LIBSOUP_VERSION < 2003000
		soup_message_add_header(
			req->request_headers, header, colonpos+1);
#else
		soup_message_headers_append(
			req->request_headers, header, colonpos+1);
#endif
		*colonpos = ':';
	}
	agstr = g_strdup_printf("Evolution/%s; Evolution-RSS/%s",
			EVOLUTION_VERSION_STRING, VERSION);
#if LIBSOUP_VERSION < 2003000
	soup_message_add_header (req->request_headers,
		"User-Agent",
		agstr);
#else
	soup_message_headers_append (req->request_headers,
		"User-Agent",
		agstr);
#endif
	g_free(agstr);

	rf->b_session = soup_sess;
	rf->b_msg_session = req;
	soup_session_send_message(soup_sess, req);

	if (req->status_code != SOUP_STATUS_OK) {
		//might not be a good ideea
		soup_session_abort(soup_sess);
		g_object_unref(soup_sess);
		rf->b_session = NULL;
		g_set_error(err, NET_ERROR, NET_ERROR_GENERIC, "%s",
				soup_status_get_phrase(req->status_code));
		goto out;
	}

out:
	if (suri) soup_uri_free(suri);
	response = req->status_code;
	if (req) g_object_unref(G_OBJECT(req));

	return response;
}