Implement messages to change preference values.

This commit is contained in:
Josh Elsasser 2007-05-24 13:56:26 +00:00
parent a12da10722
commit 64b5583a10
1 changed files with 94 additions and 2 deletions

View File

@ -46,7 +46,7 @@
#include "tr_torrent.h"
#include "util.h"
/* XXX error handling throught this file is pretty bogus */
/* XXX error handling throughout this file is pretty bogus */
enum contype { CON_SERV, CON_CLIENT };
@ -122,6 +122,10 @@ smsg_torall( enum ipc_msg id, benc_val_t * val, int64_t tag, void * arg );
static void
smsg_pref( enum ipc_msg id, benc_val_t * val, int64_t tag, void * arg );
static void
smsg_int( enum ipc_msg id, benc_val_t * val, int64_t tag, void * arg );
static void
smsg_str( enum ipc_msg id, benc_val_t * val, int64_t tag, void * arg );
static void
all_default( enum ipc_msg id, benc_val_t * val, int64_t tag, void * arg );
static gboolean
simpleresp( struct constate * con, int64_t tag, enum ipc_msg id );
@ -147,6 +151,10 @@ ipc_socket_setup( GtkWindow * parent, TrCore * core )
if( NULL == con->msgs ||
0 > ipc_addmsg( con->msgs, IPC_MSG_ADDMANYFILES, smsg_add ) ||
0 > ipc_addmsg( con->msgs, IPC_MSG_ADDONEFILE, smsg_addone ) ||
0 > ipc_addmsg( con->msgs, IPC_MSG_AUTOMAP, smsg_int ) ||
0 > ipc_addmsg( con->msgs, IPC_MSG_AUTOSTART, smsg_int ) ||
0 > ipc_addmsg( con->msgs, IPC_MSG_DIR, smsg_str ) ||
0 > ipc_addmsg( con->msgs, IPC_MSG_DOWNLIMIT, smsg_int ) ||
0 > ipc_addmsg( con->msgs, IPC_MSG_GETAUTOMAP, smsg_pref ) ||
0 > ipc_addmsg( con->msgs, IPC_MSG_GETAUTOSTART, smsg_pref ) ||
0 > ipc_addmsg( con->msgs, IPC_MSG_GETDIR, smsg_pref ) ||
@ -159,13 +167,16 @@ ipc_socket_setup( GtkWindow * parent, TrCore * core )
0 > ipc_addmsg( con->msgs, IPC_MSG_GETSTATALL, smsg_infoall ) ||
0 > ipc_addmsg( con->msgs, IPC_MSG_GETUPLIMIT, smsg_pref ) ||
0 > ipc_addmsg( con->msgs, IPC_MSG_LOOKUP, smsg_look ) ||
0 > ipc_addmsg( con->msgs, IPC_MSG_PEX, smsg_int ) ||
0 > ipc_addmsg( con->msgs, IPC_MSG_PORT, smsg_int ) ||
0 > ipc_addmsg( con->msgs, IPC_MSG_QUIT, smsg_quit ) ||
0 > ipc_addmsg( con->msgs, IPC_MSG_REMOVE, smsg_tor ) ||
0 > ipc_addmsg( con->msgs, IPC_MSG_REMOVEALL, smsg_torall ) ||
0 > ipc_addmsg( con->msgs, IPC_MSG_START, smsg_tor ) ||
0 > ipc_addmsg( con->msgs, IPC_MSG_STARTALL, smsg_torall ) ||
0 > ipc_addmsg( con->msgs, IPC_MSG_STOP, smsg_tor ) ||
0 > ipc_addmsg( con->msgs, IPC_MSG_STOPALL, smsg_torall ) )
0 > ipc_addmsg( con->msgs, IPC_MSG_STOPALL, smsg_torall ) ||
0 > ipc_addmsg( con->msgs, IPC_MSG_UPLIMIT, smsg_int ) )
{
errmsg( con->u.serv.wind, _("Failed to set up IPC:\n%s"),
strerror( errno ) );
@ -988,6 +999,87 @@ smsg_pref( enum ipc_msg id, benc_val_t * val SHUTUP, int64_t tag, void * arg )
}
}
static void
smsg_int( enum ipc_msg id, benc_val_t * val, int64_t tag, void * arg )
{
struct constate * con = arg;
struct constate_serv * srv = &con->u.serv;
if( NULL == val || TYPE_INT != val->type || INT_MAX < val->val.i )
{
simpleresp( con, tag, IPC_MSG_NOTSUP );
return;
}
switch( id )
{
case IPC_MSG_AUTOMAP:
tr_core_set_pref_bool( srv->core, PREF_ID_NAT, val->val.i );
break;
case IPC_MSG_AUTOSTART:
simpleresp( con, tag, IPC_MSG_NOTSUP );
return;
case IPC_MSG_DOWNLIMIT:
if( 0 > val->val.i )
{
tr_core_set_pref_bool( srv->core, PREF_ID_USEDOWNLIMIT,
FALSE );
}
else
{
tr_core_set_pref_int( srv->core, PREF_ID_DOWNLIMIT,
val->val.i );
tr_core_set_pref_bool( srv->core, PREF_ID_USEDOWNLIMIT, TRUE );
}
break;
case IPC_MSG_PEX:
tr_core_set_pref_bool( srv->core, PREF_ID_PEX, val->val.i );
break;
case IPC_MSG_PORT:
tr_core_set_pref_int( srv->core, PREF_ID_PORT, val->val.i );
break;
case IPC_MSG_UPLIMIT:
if( 0 > val->val.i )
{
tr_core_set_pref_bool( srv->core, PREF_ID_USEUPLIMIT,
FALSE );
}
else
{
tr_core_set_pref_int( srv->core, PREF_ID_UPLIMIT,
val->val.i );
tr_core_set_pref_bool( srv->core, PREF_ID_USEUPLIMIT, TRUE );
}
break;
default:
g_assert_not_reached();
return;
}
}
static void
smsg_str( enum ipc_msg id, benc_val_t * val, int64_t tag, void * arg )
{
struct constate * con = arg;
struct constate_serv * srv = &con->u.serv;
if( NULL == val || TYPE_STR != val->type )
{
simpleresp( con, tag, IPC_MSG_NOTSUP );
return;
}
switch( id )
{
case IPC_MSG_DIR:
tr_core_set_pref( srv->core, PREF_ID_DIR, val->val.s.s );
break;
default:
g_assert_not_reached();
return;
}
}
static void
all_default( enum ipc_msg id, benc_val_t * val SHUTUP, int64_t tag, void * arg )
{