Add a new interface to make the public port available to the frontend.
This commit is contained in:
parent
b2fb0bbf3c
commit
f67ad8cf47
|
@ -65,9 +65,10 @@ static void sigHandler ( int signal );
|
|||
|
||||
int main( int argc, char ** argv )
|
||||
{
|
||||
int i, error, nat;
|
||||
int i, error;
|
||||
tr_handle_t * h;
|
||||
tr_stat_t * s;
|
||||
tr_handle_status_t * hstat;
|
||||
|
||||
printf( "Transmission %s (%d) - http://transmission.m0k.org/\n\n",
|
||||
VERSION_STRING, VERSION_REVISION );
|
||||
|
@ -240,8 +241,8 @@ int main( int argc, char ** argv )
|
|||
tr_natTraversalEnable( h, 0 );
|
||||
for( i = 0; i < 10; i++ )
|
||||
{
|
||||
nat = tr_natTraversalStatus( h );
|
||||
if( TR_NAT_TRAVERSAL_DISABLED == nat )
|
||||
hstat = tr_handleStatus( h );
|
||||
if( TR_NAT_TRAVERSAL_DISABLED == hstat->natTraversalStatus )
|
||||
{
|
||||
/* Port mappings were deleted */
|
||||
break;
|
||||
|
|
|
@ -297,7 +297,7 @@ makeprefwindow(GtkWindow *parent, TrBackend *back) {
|
|||
ii++;
|
||||
|
||||
/* NAT traversal checkbox */
|
||||
intval = tr_natTraversalStatus(tr_backend_handle(back));
|
||||
intval = tr_handleStatus(tr_backend_handle(back))->natTraversalStatus;
|
||||
boolval = !TR_NAT_TRAVERSAL_IS_DISABLED( intval );
|
||||
setupprefwidget(natcheck, PREF_NAT, boolval);
|
||||
gtk_table_attach_defaults(GTK_TABLE(table), natcheck, 0, 2, RN(ii));
|
||||
|
|
|
@ -540,13 +540,15 @@ winclose(GtkWidget *widget SHUTUP, GdkEvent *event SHUTUP, gpointer gdata) {
|
|||
gboolean
|
||||
exitcheck(gpointer gdata) {
|
||||
struct exitdata *data = gdata;
|
||||
int natstat = tr_natTraversalStatus(tr_backend_handle(data->cbdata->back));
|
||||
tr_handle_status_t * hstat;
|
||||
|
||||
hstat = tr_handleStatus( tr_backend_handle( data->cbdata->back ) );
|
||||
|
||||
/* keep going if we haven't hit the exit timeout and
|
||||
we either have torrents left or nat traversal is stopping */
|
||||
if( time( NULL ) - data->started < TRACKER_EXIT_TIMEOUT &&
|
||||
( !tr_backend_torrents_stopped( data->cbdata->back ) ||
|
||||
TR_NAT_TRAVERSAL_DISABLED != natstat ) ) {
|
||||
TR_NAT_TRAVERSAL_DISABLED != hstat->natTraversalStatus ) ) {
|
||||
updatemodel(data->cbdata);
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -218,6 +218,9 @@ struct tr_handle_s
|
|||
|
||||
char id[21];
|
||||
char key[21];
|
||||
|
||||
tr_handle_status_t stats[2];
|
||||
int statCur;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -190,7 +190,7 @@ int tr_sharedGetPublicPort( tr_shared_t * s )
|
|||
}
|
||||
|
||||
/***********************************************************************
|
||||
* tr_sharedTraversalEnable, tr_natTraversalStatus
|
||||
* tr_sharedTraversalEnable, tr_sharedTraversalStatus
|
||||
***********************************************************************
|
||||
*
|
||||
**********************************************************************/
|
||||
|
|
|
@ -54,7 +54,7 @@ void tr_sharedSetPort ( tr_shared_t *, int port );
|
|||
int tr_sharedGetPublicPort ( tr_shared_t * s );
|
||||
|
||||
/***********************************************************************
|
||||
* tr_sharedTraversalEnable, tr_natTraversalStatus
|
||||
* tr_sharedTraversalEnable, tr_sharedTraversalStatus
|
||||
***********************************************************************
|
||||
*
|
||||
**********************************************************************/
|
||||
|
|
|
@ -86,9 +86,21 @@ void tr_natTraversalEnable( tr_handle_t * h, int enable )
|
|||
tr_sharedTraversalEnable( h->shared, enable );
|
||||
}
|
||||
|
||||
int tr_natTraversalStatus( tr_handle_t * h )
|
||||
tr_handle_status_t * tr_handleStatus( tr_handle_t * h )
|
||||
{
|
||||
return tr_sharedTraversalStatus( h->shared );
|
||||
tr_handle_status_t * s;
|
||||
|
||||
h->statCur = ( h->statCur + 1 ) % 2;
|
||||
s = &h->stats[h->statCur];
|
||||
|
||||
tr_sharedLock( h->shared );
|
||||
|
||||
s->natTraversalStatus = tr_sharedTraversalStatus( h->shared );
|
||||
s->publicPort = tr_sharedGetPublicPort( h->shared );
|
||||
|
||||
tr_sharedUnlock( h->shared );
|
||||
|
||||
return s;
|
||||
}
|
||||
|
||||
void tr_setGlobalUploadLimit( tr_handle_t * h, int limit )
|
||||
|
|
|
@ -131,19 +131,12 @@ void tr_setBindPort( tr_handle_t *, int );
|
|||
void tr_natTraversalEnable( tr_handle_t *, int enable );
|
||||
|
||||
/***********************************************************************
|
||||
* tr_natTraversalStatus
|
||||
* tr_handleStatus
|
||||
***********************************************************************
|
||||
* Return the status of NAT traversal
|
||||
* Returns some status info for the given handle.
|
||||
**********************************************************************/
|
||||
#define TR_NAT_TRAVERSAL_MAPPING 1
|
||||
#define TR_NAT_TRAVERSAL_MAPPED 2
|
||||
#define TR_NAT_TRAVERSAL_NOTFOUND 3
|
||||
#define TR_NAT_TRAVERSAL_ERROR 4
|
||||
#define TR_NAT_TRAVERSAL_UNMAPPING 5
|
||||
#define TR_NAT_TRAVERSAL_DISABLED 6
|
||||
#define TR_NAT_TRAVERSAL_IS_DISABLED( st ) \
|
||||
( TR_NAT_TRAVERSAL_DISABLED == (st) || TR_NAT_TRAVERSAL_UNMAPPING == (st) )
|
||||
int tr_natTraversalStatus( tr_handle_t * );
|
||||
typedef struct tr_handle_status_s tr_handle_status_t;
|
||||
tr_handle_status_t * tr_handleStatus( tr_handle_t * );
|
||||
|
||||
/***********************************************************************
|
||||
* tr_setGlobalUploadLimit
|
||||
|
@ -445,6 +438,20 @@ struct tr_tracker_info_s
|
|||
char * announce;
|
||||
};
|
||||
|
||||
struct tr_handle_status_s
|
||||
{
|
||||
#define TR_NAT_TRAVERSAL_MAPPING 1
|
||||
#define TR_NAT_TRAVERSAL_MAPPED 2
|
||||
#define TR_NAT_TRAVERSAL_NOTFOUND 3
|
||||
#define TR_NAT_TRAVERSAL_ERROR 4
|
||||
#define TR_NAT_TRAVERSAL_UNMAPPING 5
|
||||
#define TR_NAT_TRAVERSAL_DISABLED 6
|
||||
#define TR_NAT_TRAVERSAL_IS_DISABLED( st ) \
|
||||
( TR_NAT_TRAVERSAL_DISABLED == (st) || TR_NAT_TRAVERSAL_UNMAPPING == (st) )
|
||||
int natTraversalStatus;
|
||||
int publicPort;
|
||||
};
|
||||
|
||||
#ifdef __TRANSMISSION__
|
||||
# include "internal.h"
|
||||
#endif
|
||||
|
|
|
@ -485,7 +485,7 @@ static void sleepCallBack(void * controller, io_service_t y, natural_t messageTy
|
|||
|
||||
enumerator = [fTorrents objectEnumerator];
|
||||
Torrent * torrent;
|
||||
while (!timeUp && ((torrent = [enumerator nextObject]) || tr_natTraversalStatus(fLib) != TR_NAT_TRAVERSAL_DISABLED))
|
||||
while (!timeUp && ((torrent = [enumerator nextObject]) || tr_handleStatus(fLib)->natTraversalStatus != TR_NAT_TRAVERSAL_DISABLED))
|
||||
while (![torrent isPaused] && !(timeUp = [start timeIntervalSinceNow] < -5.0))
|
||||
{
|
||||
usleep(100000);
|
||||
|
|
|
@ -299,18 +299,18 @@
|
|||
|
||||
- (void) updateNatStatus
|
||||
{
|
||||
int status = tr_natTraversalStatus(fHandle);
|
||||
if (fNatStatus == status)
|
||||
tr_handle_status_t * hstat = tr_handleStatus(fHandle);
|
||||
if (fNatStatus == hstat->natTraversalStatus)
|
||||
return;
|
||||
fNatStatus = status;
|
||||
fNatStatus = hstat->natTraversalStatus;
|
||||
|
||||
if (status == 2)
|
||||
if (hstat->natTraversalStatus == TR_NAT_TRAVERSAL_MAPPED)
|
||||
{
|
||||
[fNatStatusField setStringValue: NSLocalizedString(@"Port successfully mapped",
|
||||
"Preferences -> Network -> port map status")];
|
||||
[fNatStatusImage setImage: [NSImage imageNamed: @"GreenDot.tiff"]];
|
||||
}
|
||||
else if (status == 3 || status == 4)
|
||||
else if (hstat->natTraversalStatus == TR_NAT_TRAVERSAL_NOTFOUND || hstat->natTraversalStatus == TR_NAT_TRAVERSAL_ERROR)
|
||||
{
|
||||
[fNatStatusField setStringValue: NSLocalizedString(@"Error mapping port",
|
||||
"Preferences -> Network -> port map status")];
|
||||
|
|
Loading…
Reference in New Issue