소프트웨어‎ > ‎

Transmission

http://www.transmissionbt.com/

토런트 프로그램. 다양한 플랫폼과 다양한 환경을 지원한다.
나의 경우 리눅스에서 데몬(서버)을 구동하고 웹으로 접근해 간단한 조작을 하고 일괄처리 등이 필요한 때는 리눅스에 직접 접속해 명령행에서 처리를 한다. 혹은, (GTK+ 빌드의 경우 데몬이 나오기 전에 먼저 나왔기 때문에 구동중인 데몬에 접속해서 처리하는 기능이 없지만) Qt 빌드의 경우 나중에 나왔기 때문에 웹에서처럼 이미 구동중인 데몬에 접속하는 것도 가능하다.

utorrent가 지원하는 webseed 형식을 지원하지 않는 문제가 있었으나, 1.9 이후에는 utorrent에서만 되던 시드와 아울러 magnet도 받아들일 수 있는 등 거의 완전한 최신 구현을 다 갖추었다.


script-torrent-done-enabled, script-torrent-done-filename 설정을 통해 전송이 끝난 다음에 스크립트를 실행할 수 있는데, 자세한 작성 방식에 대해 별도로 문서화된 것은 없어 보인다. 소스 코드 중에 스크립트를 호출하는 부분은 다음과 같다.
static void
torrentCallScript( tr_torrent * tor, const char * script )
{
    assert( tr_isTorrent( tor ) );

    if( script && *script )
    {
        char buf[128];
        const time_t now = tr_time( );

        tr_setenv( "TR_APP_VERSION", SHORT_VERSION_STRING, 1 );

        tr_snprintf( buf, sizeof( buf ), "%d", tr_torrentId( tor ) );
        tr_setenv( "TR_TORRENT_ID", buf, 1 );
        tr_setenv( "TR_TORRENT_NAME", tr_torrentName( tor ), 1 );
        tr_setenv( "TR_TORRENT_DIR", tor->currentDir, 1 );
        tr_setenv( "TR_TORRENT_HASH", tor->info.hashString, 1 );
        tr_strlcpy( buf, ctime( &now ), sizeof( buf ) );
        *strchr( buf,'\n' ) = '\0';
        tr_setenv( "TR_TIME_LOCALTIME", buf, 1 );
        tr_torinf( tor, "Calling script \"%s\"", script );
        system( script );
    }
}
인자로 전달하는 방식이 아니라 실행 전에 환경변수(environment variable)로 지정하고 그 변수 이름을 참조해서 사용하는 것으로 보인다. (시험 안 해봤음)


watch-dirwatch-dir-enabledstart-added-torrents, trash-original-torrent-files 설정을 통해 특정 디렉토리에 파일을 배치하는 것만으로 데몬 등이 파일을 인식하고 추가해 바로 전송을 시작하도록 할 수 있다. 이때 추가된 시드 파일이 삭제되지 않는 것은 데몬이 실행되는 사용자가 해당 디렉토리나 파일에 대해 쓰기 권한이 없는 것일 수 있으며 chmod, chgrp 등 명령으로 처리할 수 있다.


transmission-qt가 transmission-daemon에 즉시 자동으로 붙지 않는 것이 (obsolete인) QHttp가 첫 전송 때문에 이후 300개 가량의 처리를 무시해서 생기는 문제였고, QNetworkAccessManager로 바꿔서 해결했다고 한다.

transmission-qt에서 토런트의 저장 위치를 바꿀 때 지금까지는 파일 대화창이 나와서 잘 썼는데 r10722부터 그냥 입력칸 하나로 대체됐다. 무척 불편하게 바뀐 변화라서 찾아보니 원격 세션에 접속했을 때는 파일시스템 구조가 다르기 때문에 파일 대화창을 보여주는 의미가 없다는 점이 지적되었다. 합당한 지적이라서 이의제기를 하기가 어렵다. 127.0.0.1에 접속하는 원격 세션의 경우는 따로 취급해달라는 요청은 터널링을 통해 접속했을 경우를 구분할 수 없어서 기각.