示例#1
0
PurpleUtilFetchUrlData* spin_vfetch_post_request
(SpinData* spin,const gchar* url,
 PurpleUtilFetchUrlCallback callback,gpointer userdata,
 va_list args)
{
  gchar *host,*path,*user,*passwd,*req,*cookie_header=NULL;
  gint port;
  GString* post_data;
  PurpleAccount* account;

  g_return_val_if_fail(spin,NULL);
  g_return_val_if_fail(url,NULL);
  g_return_val_if_fail(callback,NULL);
  
  if(!purple_url_parse(url,&host,&port,&path,&user,&passwd))
    return NULL;

  account = purple_connection_get_account(spin->gc);

  post_data = spin_vcollect_params(args);

  if(spin->session)
    cookie_header = g_strdup_printf("Cookie:session=%s;session2=%s\r\n",
				    spin->session,spin->session);

  req = g_strdup_printf("POST /%s HTTP/1.0\r\n"
			"Host:%s\r\n"
			"Content-Type:application/x-www-form-urlencoded\r\n"
			"Content-Length:%" G_GSIZE_FORMAT "\r\n"
			"Connection:close\r\n"
			"%s"
			"\r\n%s",
			path ? path : "",host,post_data->len,
			cookie_header ? cookie_header : "",
			post_data->str);


  PurpleUtilFetchUrlData* url_data =
    purple_util_fetch_url_request_len
    (url,
     TRUE, /* full url */
     NULL, /* user agent */
     FALSE, /* http 1.1 */
     req, /* request */
     FALSE, /* include headers */
     -1, /* max len */
     callback, /* callback */
     userdata);

  g_free(req); 
  g_free(cookie_header);
  g_string_free(post_data,TRUE);
  g_free(host);
  g_free(path);
  g_free(user);
  g_free(passwd);

  return url_data;
}
示例#2
0
PurpleUtilFetchUrlData* spin_fetch_url_request
(SpinData* spin,const gchar* url,
 PurpleUtilFetchUrlCallback callback,gpointer userdata)
{
  gchar *host,*path,*user,*passwd,*req,*cookie_header=NULL;
  gint port;
  PurpleAccount* account;

  g_return_val_if_fail(spin,NULL);
  g_return_val_if_fail(url,NULL);
  g_return_val_if_fail(callback,NULL);
  
  if(!purple_url_parse(url,&host,&port,&path,&user,&passwd))
    return NULL;

  account = purple_connection_get_account(spin->gc);

  if(spin->session)
    cookie_header = g_strdup_printf("Cookie:session=%s;session2=%s\r\n",
				    spin->session,spin->session);

  req = g_strdup_printf("GET /%s HTTP/1.0\r\n"
			"Host:%s\r\n"
			"Connection:close\r\n"
			"%s"
			"\r\n",
			path ? path : "",host,
			cookie_header ? cookie_header : "");

  PurpleUtilFetchUrlData* url_data =
    purple_util_fetch_url_request_len
    (url,
     TRUE, /* full url */
     NULL, /* user agent */
     FALSE, /* http 1.1 */
     req, /* request */
     FALSE, /* include headers */
     -1, /* max len */
     callback, /* callback */
     userdata);

  g_free(req); 
  g_free(cookie_header);
  g_free(host);
  g_free(path);
  g_free(user);
  g_free(passwd);

  return url_data;
}
示例#3
0
文件: upnp.c 项目: Lilitana/Pidgin
static PurpleUtilFetchUrlData*
purple_upnp_generate_action_message_and_send(const gchar* actionName,
		const gchar* actionParams, PurpleUtilFetchUrlCallback cb,
		gpointer cb_data)
{
	PurpleUtilFetchUrlData* gfud;
	gchar* soapMessage;
	gchar* totalSendMessage;
	gchar* pathOfControl;
	gchar* addressOfControl;
	int port = 0;

	/* parse the url into address, port, path variables */
	if(!purple_url_parse(control_info.control_url, &addressOfControl,
			&port, &pathOfControl, NULL, NULL)) {
		purple_debug_error("upnp",
			"generate_action_message_and_send(): Failed In Parse URL\n");
		/* XXX: This should probably be async */
		if(cb)
			cb(NULL, cb_data, NULL, 0, NULL);
		return NULL;
	}
	if(port == 0 || port == -1) {
		port = DEFAULT_HTTP_PORT;
	}

	/* set the soap message */
	soapMessage = g_strdup_printf(SOAP_ACTION, actionName,
		control_info.service_type, actionParams, actionName);

	/* set the HTTP Header, and append the body to it */
	totalSendMessage = g_strdup_printf(HTTP_HEADER_ACTION "%s",
		pathOfControl, addressOfControl, port,
		control_info.service_type, actionName,
		strlen(soapMessage), soapMessage);
	g_free(pathOfControl);
	g_free(soapMessage);

	gfud = purple_util_fetch_url_request_len(control_info.control_url, FALSE, NULL, TRUE,
				totalSendMessage, TRUE, MAX_UPNP_DOWNLOAD, cb, cb_data);

	g_free(totalSendMessage);
	g_free(addressOfControl);

	return gfud;
}
示例#4
0
文件: upnp.c 项目: Lilitana/Pidgin
static void
purple_upnp_parse_description(const gchar* descriptionURL, UPnPDiscoveryData *dd)
{
	gchar* httpRequest;
	gchar* descriptionXMLAddress;
	gchar* descriptionAddress;
	int port = 0;

	/* parse the 4 above variables out of the descriptionURL
	   example description URL: http://192.168.1.1:5678/rootDesc.xml */

	/* parse the url into address, port, path variables */
	if(!purple_url_parse(descriptionURL, &descriptionAddress,
			&port, &descriptionXMLAddress, NULL, NULL)) {
		return;
	}
	if(port == 0 || port == -1) {
		port = DEFAULT_HTTP_PORT;
	}

	/* for example...
	   GET /rootDesc.xml HTTP/1.1\r\nHost: 192.168.1.1:5678\r\n\r\n */
	httpRequest = g_strdup_printf(
		"GET /%s HTTP/1.1\r\n"
		"Connection: close\r\n"
		"Host: %s:%d\r\n\r\n",
		descriptionXMLAddress, descriptionAddress, port);

	g_free(descriptionXMLAddress);

	dd->full_url = g_strdup_printf("http://%s:%d",
			descriptionAddress, port);
	g_free(descriptionAddress);

	/* Remove the timeout because everything it is waiting for has
	 * successfully completed */
	purple_timeout_remove(dd->tima);
	dd->tima = 0;

	purple_util_fetch_url_request_len(descriptionURL, TRUE, NULL, TRUE, httpRequest,
			TRUE, MAX_UPNP_DOWNLOAD, upnp_parse_description_cb, dd);

	g_free(httpRequest);

}
示例#5
0
文件: relnot.c 项目: dylex/pidgin
static void
do_check(void)
{
	int last_check = purple_prefs_get_int("/plugins/gtk/relnot/last_check");
	if(!last_check || time(NULL) - last_check > MIN_CHECK_INTERVAL) {
		gchar *url, *request;
		const char *host = "pidgin.im";

		url = g_strdup_printf("https://%s/version.php?version=%s&build=%s",
				host,
				purple_core_get_version(),
#ifdef _WIN32
				"purple-win32"
#else
				"purple"
#endif
		);

		request = g_strdup_printf(
				"GET %s HTTP/1.0\r\n"
				"Connection: close\r\n"
				"Accept: */*\r\n"
				"Host: %s\r\n\r\n",
				url,
				host);

		purple_util_fetch_url_request_len(url, TRUE, NULL, FALSE,
			request, TRUE, -1, version_fetch_cb, NULL);

		g_free(request);
		g_free(url);

		purple_prefs_set_int("/plugins/gtk/relnot/last_check", time(NULL));

	}
}