2
* This file Copyright (C) 2008-2009 Charles Kerr <charles@transmissionbt.com>
2
* This file Copyright (C) 2008-2009 Mnemosyne LLC
4
4
* This file is licensed by the GPL version 2. Works owned by the
5
5
* Transmission project are granted a special exemption to clause 2(b)
7
7
* This exemption does not extend to derived works not owned by
8
8
* the Transmission project.
10
* $Id: util.c 9093 2009-09-10 17:39:44Z charles $
10
* $Id: util.c 9671 2009-12-05 02:19:24Z charles $
13
13
#include <ctype.h> /* isxdigit() */
327
gtr_is_supported_url( const char * str )
329
return !strncmp( str, "ftp://", 6 )
330
|| !strncmp( str, "http://", 7 )
331
|| !strncmp( str, "https://", 8 );
335
gtr_is_magnet_link( const char * str )
337
return !strncmp( str, "magnet:?", 8 );
341
gtr_is_hex_hashcode( const char * str )
345
if( !str || ( strlen( str ) != 40 ) )
348
for( i=0; i<40; ++i )
349
if( !isxdigit( str[i] ) )
326
checkfilenames( int argc,
356
checkfilenames( int argc, char **argv )
330
359
GSList * ret = NULL;
331
char * pwd = g_get_current_dir( );
360
char * pwd = g_get_current_dir( );
333
for( i = 0; i < argc; ++i )
362
for( i=0; i<argc; ++i )
335
char * filename = g_path_is_absolute( argv[i] )
336
? g_strdup ( argv[i] )
337
: g_build_filename( pwd, argv[i], NULL );
364
if( gtr_is_supported_url( argv[i] ) || gtr_is_magnet_link( argv[i] ) )
366
ret = g_slist_prepend( ret, g_strdup( argv[i] ) );
368
else /* local file */
370
char * filename = g_path_is_absolute( argv[i] )
371
? g_strdup ( argv[i] )
372
: g_build_filename( pwd, argv[i], NULL );
339
if( g_file_test( filename, G_FILE_TEST_EXISTS ) )
340
ret = g_slist_prepend( ret, filename );
374
if( g_file_test( filename, G_FILE_TEST_EXISTS ) )
375
ret = g_slist_prepend( ret, filename );
377
if( gtr_is_hex_hashcode( argv[i] ) )
378
ret = g_slist_prepend( ret, g_strdup_printf( "magnet:?xt=urn:btih:%s", argv[i] ) );
523
565
/* FIXME: why is this static? */
524
566
static gboolean success = FALSE;
525
568
#ifdef HAVE_DBUS_GLIB
526
DBusGProxy * proxy = NULL;
528
DBusGConnection * conn;
529
char * file_contents;
530
570
gsize file_length;
571
char * file_contents = NULL;
573
/* If it's a file, load its contents and send them over the wire...
574
* it might be a temporary file that's going to disappear. */
532
575
if( g_file_get_contents( filename, &file_contents, &file_length, NULL ) )
576
payload = tr_base64_encode( file_contents, file_length, NULL );
577
else if( gtr_is_supported_url( filename ) || gtr_is_magnet_link( filename ) )
578
payload = tr_strdup( filename );
582
if( payload != NULL )
534
char * b64 = tr_base64_encode( file_contents, file_length, NULL );
585
DBusGConnection * conn;
586
DBusGProxy * proxy = NULL;
535
588
if(( conn = dbus_g_bus_get( DBUS_BUS_SESSION, &err )))
536
589
proxy = dbus_g_proxy_new_for_name (conn, VALUE_SERVICE_NAME,
537
590
VALUE_SERVICE_OBJECT_PATH,
538
591
VALUE_SERVICE_INTERFACE );
540
593
g_message( "err: %s", err->message );
542
596
dbus_g_proxy_call( proxy, "AddMetainfo", &err,
597
G_TYPE_STRING, payload,
545
599
G_TYPE_BOOLEAN, &success,
546
600
G_TYPE_INVALID );