2016. 3. 7. 01:42

Transmission RPC 활용 하여 Torrent 추가 하기.

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

안녕하세요.

현재 OpenMediaVault 를 활용하여서 집에서 NAS를 돌리고 있습니다.

일전에 만들었던 어플중 하나가 TorrentProject에서 검색된 결과의 Seed파일을 받아서,

uTorrent 실행 하여 자동으로 다운로드 하는 것 이였는데요.

Transmission demon을 활용하여 원격으로 다운로드 시키는 방법으로 확장 된 것으로 보시면 됩니다.

우선 Transmission의 경우 RPC가 직접 정의가 되어 있습니다.

https://trac.transmissionbt.com/wiki/rpc

해당 내용중 Example을 보니 아래와 같네요.

형태는 Json을 활용 하는 것 같고, 오픈소스가 있나 서치를 해보니 있길래 다운로드 하여 처리 해봤습니다.

https://github.com/Beatlegger/Transmission.API.RPC

소스를 다운로드 받아서 살펴 보니, Json을 Dynamic으로 처리 하는 부분이 있습니다.

위의 인자를 ToJson합니다.

 

닷넷 최신 버전or 4.0 or 4.5 이상이면 될 듯 합니다.

위의 라이브러리를 사용한 코드 입니다.

OpenMediavault의 기본 Password는 openmediavault 입니다.

패스워드는 바꿔서 사용하는게 보안상 좋습니다.

결과 입니다.

Fiddler2로 패킷캡쳐를 해봤습니다.

총 2개가 나갔는데요.

내용을 살펴 봅니다.

첫번째 패킷의 경우 세션 ID가 없다고 나옵니다.

그래서 해당 함수를 찾아서 들어가봅니다.

요 함수가 요청 하는 함수 입니다.

여기 있네요. Exception 이 떨어졌을 때 , 세션이 없다면 다시 SendRequest를 보냅니다.

2번째 패킷입니다.

세션 ID가 있으니 , 다운로드 진행중인 목록을 받아 옵니다.

 

이제 다운로드를 추가 해 봅니다.

리눅스를 검색해서 나온 첫번째 결과 입니다.

Torrent link를 저장 합니다.

http://torrentproject.se/torrent/CE9BF47718C8CE2EA5144DF938C7AC2AF8A191CE.torrent

이 후 코드를 수정 합니다.

핵심은 HTTP 파일을 다운로드 후 Base64String으로 바꾸는 것입니다.

이렇게 처리 한 후 Transmission의 WebUI에서 추가 유무를 확인 합니다.

추가 되었네요.

Fiddler2로 패킷을 봅니다.

위의 tag가 2인 이유는 클라이언트가 Session Id가 없어서 1번째는 무시되고 2번째 시도 된게 성공했기때문입니다.

향후 일전의 어플에 요 기능을 추가 하게 되면 집에 NAS라든지, 원격으로 파일 추가가 좀더 용이 하지 않을까 합니다.

감사 합니다.