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; }
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; }
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; }
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); }
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)); } }