From 536c07488b6ba3cae81b58813b665b742531f64c Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Thu, 20 Apr 2006 15:58:05 +0000 Subject: [PATCH] To add some useful information to the exception message: * src/SocketCore.cc : Updated messages. * src/SegmentMan.cc : * src/TorrentMan.cc : Updated messages. * src/MultiDiskWriter.cc : Updated messages. * src/Util.cc : Updated messages. * src/AbstractDiskWriter.cc : Updated messages. * src/PreAllocationDiskWriter.cc : Updated messages. * src/message.cc : Added new messages. Updated some messages. * src/TrackerWatcherCommand.h (MIN_PEERS): New definition. * src/TrackerWatcherCommand.cc (execute): Use MIN_PEERS. Updated threshold from 30 to 15. * src/AbstractDiskWriter.h (filename): New variable. * src/AbstractDiskWriter.cc (openExistingFile): Assigned filename. (createFile): Assigned filename. * src/main.cc: Updated the help message for http-auth-scheme. --- ChangeLog | 23 +++ po/aria2c.pot | 247 ++++++++++++++++++++++++------- po/ja.gmo | Bin 17354 -> 20522 bytes po/ja.po | 260 ++++++++++++++++++++++++++------- src/AbstractDiskWriter.cc | 14 +- src/AbstractDiskWriter.h | 2 +- src/Directory.cc | 6 +- src/MultiDiskWriter.cc | 19 ++- src/PreAllocationDiskWriter.cc | 5 +- src/SegmentMan.cc | 39 +++-- src/SocketCore.cc | 43 +++--- src/TorrentMan.cc | 61 +++++--- src/TrackerWatcherCommand.cc | 2 +- src/TrackerWatcherCommand.h | 2 + src/Util.cc | 15 +- src/main.cc | 5 +- src/message.h | 45 ++++-- 17 files changed, 583 insertions(+), 205 deletions(-) diff --git a/ChangeLog b/ChangeLog index 44569268..7ccccbde 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,26 @@ +2006-04-21 Tatsuhiro Tsujikawa + + To add some useful information to the exception message: + + * src/SocketCore.cc : Updated messages. + * src/SegmentMan.cc : + * src/TorrentMan.cc : Updated messages. + * src/MultiDiskWriter.cc : Updated messages. + * src/Util.cc : Updated messages. + * src/AbstractDiskWriter.cc : Updated messages. + * src/PreAllocationDiskWriter.cc : Updated messages. + * src/message.cc : Added new messages. Updated some messages. + + * src/TrackerWatcherCommand.h (MIN_PEERS): New definition. + * src/TrackerWatcherCommand.cc (execute): Use MIN_PEERS. + Updated threshold from 30 to 15. + + * src/AbstractDiskWriter.h (filename): New variable. + * src/AbstractDiskWriter.cc (openExistingFile): Assigned filename. + (createFile): Assigned filename. + + * src/main.cc: Updated the help message for http-auth-scheme. + 2006-04-20 Tatsuhiro Tsujikawa To add TrackerUpdateCommand with which replaces diff --git a/po/aria2c.pot b/po/aria2c.pot index 148defe6..227ddfab 100644 --- a/po/aria2c.pot +++ b/po/aria2c.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: http://aria2.sourceforge.net/\n" -"POT-Creation-Date: 2006-04-20 02:49+0900\n" +"POT-Creation-Date: 2006-04-21 00:25+0900\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -77,6 +77,21 @@ msgstr "" msgid "CUID#%d - Unregistering cuid from segmentManager." msgstr "" +#: src/message.h:43 +#, c-format +msgid "CUID#%d - we got new piece. index=%d" +msgstr "" + +#: src/message.h:44 +#, c-format +msgid "CUID#%d - we got wrong piece. index=%d" +msgstr "" + +#: src/message.h:46 +#, c-format +msgid "Tracker returned warning message: %s" +msgstr "" + #: src/message.h:48 #, c-format msgid "The segment file %s exists." @@ -115,7 +130,7 @@ msgstr "" #: src/message.h:57 #, c-format -msgid "Too large chunk. size = %d" +msgid "Too large chunk. size=%d" msgstr "" #: src/message.h:58 @@ -151,12 +166,12 @@ msgstr "" #: src/message.h:65 #, c-format -msgid "The response status is not successful. status = %d" +msgid "The response status is not successful. status=%d" msgstr "" #: src/message.h:66 #, c-format -msgid "Too large file size. size = %lld" +msgid "Too large file size. size=%lld" msgstr "" #: src/message.h:67 @@ -173,10 +188,147 @@ msgstr "" msgid "Size mismatch %lld != %lld" msgstr "" +#: src/message.h:70 +msgid "Authorization failed." +msgstr "" + #: src/message.h:71 msgid "Got EOF from the server." msgstr "" +#: src/message.h:72 +msgid "Got EOF from peer." +msgstr "" + +#: src/message.h:73 +msgid "Mulformed meta info." +msgstr "" + +#: src/message.h:75 +#, c-format +msgid "Failed to open the file %s, cause: %s" +msgstr "" + +#: src/message.h:76 +#, c-format +msgid "Failed to write into the file %s, cause: %s" +msgstr "" + +#: src/message.h:77 +#, c-format +msgid "Failed to read from the file %s, cause: %s" +msgstr "" + +#: src/message.h:78 +#, c-format +msgid "Failed to calculate SHA1 digest of or a part of the file %s, cause: %s" +msgstr "" + +#: src/message.h:79 +#, c-format +msgid "Failed to seek the file %s, cause: %s" +msgstr "" + +#: src/message.h:80 +#, c-format +msgid "The offset is out of range, offset=%lld" +msgstr "" + +#: src/message.h:81 +#, c-format +msgid "%s is not a directory." +msgstr "" + +#: src/message.h:82 +#, c-format +msgid "Failed to make the directory %s, cause: %s" +msgstr "" + +#: src/message.h:83 +#, c-format +msgid "Failed to open the segment file %s, cause: %s" +msgstr "" + +#: src/message.h:84 +#, c-format +msgid "Failed to write into the segment file %s, cause: %s" +msgstr "" + +#: src/message.h:85 +#, c-format +msgid "Failed to read from the segment file %s, cause: %s" +msgstr "" + +#: src/message.h:87 +#, c-format +msgid "Failed to open a socket, cause: %s" +msgstr "" + +#: src/message.h:88 +#, c-format +msgid "Failed to set a socket option, cause: %s" +msgstr "" + +#: src/message.h:89 +#, c-format +msgid "Failed to bind a socket, cause: %s" +msgstr "" + +#: src/message.h:90 +#, c-format +msgid "Failed to listen to a socket, cause: %s" +msgstr "" + +#: src/message.h:91 +#, c-format +msgid "Failed to accept a peer connection, cause: %s" +msgstr "" + +#: src/message.h:92 +#, c-format +msgid "Failed to get the name of socket, cause: %s" +msgstr "" + +#: src/message.h:93 +#, c-format +msgid "Failed to get the name of connected peer, cause: %s" +msgstr "" + +#: src/message.h:94 +#, c-format +msgid "Failed to resolve the hostname %s, cause: %s" +msgstr "" + +#: src/message.h:95 +#, c-format +msgid "Failed to connect to the host %s, cause: %s" +msgstr "" + +#: src/message.h:96 +#, c-format +msgid "Failed to check whether the socket is writable, cause: %s" +msgstr "" + +#: src/message.h:97 +#, c-format +msgid "Failed to check whether the socket is readable, cause: %s" +msgstr "" + +#: src/message.h:98 +#, c-format +msgid "Failed to send data, cause: %s" +msgstr "" + +#: src/message.h:99 +#, c-format +msgid "Failed to receive data, cause: %s" +msgstr "" + +#: src/message.h:100 +#, c-format +msgid "Failed to peek data, cause: %s" +msgstr "" + #: src/main.cc:64 #, c-format msgid "" @@ -336,30 +488,27 @@ msgstr "" msgid "" " --http-auth-scheme=SCHEME Set HTTP authentication scheme. Currently, " "basic\n" -" is the only supported scheme. You MUST " -"specify\n" -" this option in order to use HTTP " -"authentication\n" -" as well as --http-user and --http-passwd." +" is the only supported scheme.\n" +" Default: basic" msgstr "" -#: src/main.cc:188 +#: src/main.cc:187 msgid " --referer=REFERER Set Referer. This affects to all URLs." msgstr "" -#: src/main.cc:189 +#: src/main.cc:188 msgid "" " --ftp-user=USER Set FTP user. This affects to all URLs.\n" " Default: anonymous" msgstr "" -#: src/main.cc:191 +#: src/main.cc:190 msgid "" " --ftp-passwd=PASSWD Set FTP password. This affects to all URLs.\n" " Default: ARIA2USER@" msgstr "" -#: src/main.cc:193 +#: src/main.cc:192 msgid "" " --ftp-type=TYPE Set FTP transfer type. TYPE is either " "'binary'\n" @@ -367,11 +516,11 @@ msgid "" " Default: binary" msgstr "" -#: src/main.cc:196 +#: src/main.cc:195 msgid " -p, --ftp-pasv Use passive mode in FTP." msgstr "" -#: src/main.cc:197 +#: src/main.cc:196 msgid "" " --ftp-via-http-proxy=METHOD Use HTTP proxy in FTP. METHOD is either 'get' " "or\n" @@ -379,11 +528,11 @@ msgid "" " Default: tunnel" msgstr "" -#: src/main.cc:201 +#: src/main.cc:200 msgid " -T, --torrent-file=TORRENT_FILE The file path to .torrent file." msgstr "" -#: src/main.cc:202 +#: src/main.cc:201 msgid "" " --follow-torrent=true|false Setting this option to false prevents aria2 " "to\n" @@ -392,142 +541,142 @@ msgid "" " Default: true" msgstr "" -#: src/main.cc:206 +#: src/main.cc:205 msgid "" " -S, --show-files Print the file listing in .torrent file and " "exit." msgstr "" -#: src/main.cc:207 +#: src/main.cc:206 msgid "" " --direct-file-mapping=true|false Directly read from and write to each file\n" " mentioned in .torrent file.\n" " Default: true" msgstr "" -#: src/main.cc:210 +#: src/main.cc:209 msgid "" " --listen-port Set port number to listen to for peer " "connection." msgstr "" -#: src/main.cc:212 +#: src/main.cc:211 msgid " -v, --version Print the version number and exit." msgstr "" -#: src/main.cc:213 +#: src/main.cc:212 msgid " -h, --help Print this message and exit." msgstr "" -#: src/main.cc:216 +#: src/main.cc:215 msgid "" " You can specify multiple URLs. All URLs must point to the same file\n" " or downloading fails." msgstr "" -#: src/main.cc:220 +#: src/main.cc:219 msgid "" " Specify files in multi-file torrent to download. Use conjunction with\n" " -T option." msgstr "" -#: src/main.cc:223 +#: src/main.cc:222 msgid "Examples:" msgstr "" -#: src/main.cc:224 +#: src/main.cc:223 msgid " Download a file by 1 connection:" msgstr "" -#: src/main.cc:226 +#: src/main.cc:225 msgid " Download a file by 2 connections:" msgstr "" -#: src/main.cc:228 +#: src/main.cc:227 msgid " Download a file by 2 connections, each connects to a different server:" msgstr "" -#: src/main.cc:230 +#: src/main.cc:229 msgid " You can mix up different protocols:" msgstr "" -#: src/main.cc:233 +#: src/main.cc:232 msgid " Download a torrent:" msgstr "" -#: src/main.cc:235 +#: src/main.cc:234 msgid " Download a torrent using local .torrent file:" msgstr "" -#: src/main.cc:237 +#: src/main.cc:236 msgid " Download only selected files:" msgstr "" -#: src/main.cc:241 +#: src/main.cc:240 #, c-format msgid "Report bugs to %s" msgstr "" -#: src/main.cc:335 +#: src/main.cc:334 msgid "unrecognized proxy format" msgstr "" -#: src/main.cc:362 +#: src/main.cc:361 msgid "Currently, supported authentication scheme is basic." msgstr "" -#: src/main.cc:371 +#: src/main.cc:370 msgid "retry-wait must be between 0 and 60." msgstr "" -#: src/main.cc:388 +#: src/main.cc:387 msgid "ftp-type must be either 'binary' or 'ascii'." msgstr "" -#: src/main.cc:397 +#: src/main.cc:396 msgid "ftp-via-http-proxy must be either 'get' or 'tunnel'." msgstr "" -#: src/main.cc:415 +#: src/main.cc:414 msgid "min-segment-size invalid" msgstr "" -#: src/main.cc:426 +#: src/main.cc:425 msgid "http-proxy-method must be either 'get' or 'tunnel'." msgstr "" -#: src/main.cc:434 +#: src/main.cc:433 msgid "listen-port must be between 1024 and 65535." msgstr "" -#: src/main.cc:445 +#: src/main.cc:444 msgid "follow-torrent must be either 'true' or 'false'." msgstr "" -#: src/main.cc:485 +#: src/main.cc:484 msgid "split must be between 1 and 5." msgstr "" -#: src/main.cc:495 +#: src/main.cc:494 msgid "timeout must be between 1 and 600" msgstr "" -#: src/main.cc:504 +#: src/main.cc:503 msgid "max-tries invalid" msgstr "" -#: src/main.cc:533 +#: src/main.cc:532 msgid "specify at least one URL" msgstr "" -#: src/main.cc:540 +#: src/main.cc:539 msgid "daemon failed" msgstr "" -#: src/main.cc:644 +#: src/main.cc:643 msgid "Files:" msgstr "" -#: src/main.cc:667 +#: src/main.cc:666 msgid "Errors occurred while binding port.\n" msgstr "" diff --git a/po/ja.gmo b/po/ja.gmo index 41db6567e3c49a606064b95fb2f8180ae6bcf167..6fe9ebbfc48d9deec07157aea870520eb102feff 100644 GIT binary patch delta 5669 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 diff --git a/po/ja.po b/po/ja.po index 27bd13f9..d413708b 100644 --- a/po/ja.po +++ b/po/ja.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: aria2c 0.2.1\n" "Report-Msgid-Bugs-To: http://aria2.sourceforge.net/\n" -"POT-Creation-Date: 2006-04-20 02:49+0900\n" -"PO-Revision-Date: 2006-04-19 02:03+0900\n" +"POT-Creation-Date: 2006-04-21 00:25+0900\n" +"PO-Revision-Date: 2006-04-21 00:42+0900\n" "Last-Translator: Tatsuhiro Tsujikawa \n" "Language-Team: Japanese \n" "MIME-Version: 1.0\n" @@ -85,6 +85,21 @@ msgstr "" msgid "CUID#%d - Unregistering cuid from segmentManager." msgstr "CUID#%d - cuid をセグメントマネジャーから削除します." +#: src/message.h:43 +#, c-format +msgid "CUID#%d - we got new piece. index=%d" +msgstr "CUID#%d - 新しいピースを入手しました. index=%d" + +#: src/message.h:44 +#, c-format +msgid "CUID#%d - we got wrong piece. index=%d" +msgstr "CUID#%d - ピースを入手しましたが, データに誤りがあります. index=%d" + +#: src/message.h:46 +#, c-format +msgid "Tracker returned warning message: %s" +msgstr "トラッカーが警告メッセージを返しました: %s" + #: src/message.h:48 #, c-format msgid "The segment file %s exists." @@ -123,7 +138,7 @@ msgstr "chunk #: src/message.h:57 #, c-format -msgid "Too large chunk. size = %d" +msgid "Too large chunk. size=%d" msgstr "chunk サイズ (%d) が大きすぎます." #: src/message.h:58 @@ -159,12 +174,12 @@ msgstr " #: src/message.h:65 #, c-format -msgid "The response status is not successful. status = %d" +msgid "The response status is not successful. status=%d" msgstr "レスポンスのステータス (%d) が異常です." #: src/message.h:66 #, c-format -msgid "Too large file size. size = %lld" +msgid "Too large file size. size=%lld" msgstr "ファイルサイズ (%lld) が大きすぎます." #: src/message.h:67 @@ -181,10 +196,151 @@ msgstr "SSL msgid "Size mismatch %lld != %lld" msgstr "サイズが合いません (%lld != %lld)" +#: src/message.h:70 +msgid "Authorization failed." +msgstr "認証に失敗しました." + #: src/message.h:71 msgid "Got EOF from the server." msgstr "サーバーから EOF を受けとりました." +#: src/message.h:72 +msgid "Got EOF from peer." +msgstr "ピアから EOF を受け取りました." + +#: src/message.h:73 +msgid "Mulformed meta info." +msgstr "メタ情報ファイルの記述が不正です." + +#: src/message.h:75 +#, c-format +msgid "Failed to open the file %s, cause: %s" +msgstr "ファイル %s をオープンできませんでした. 原因: %s" + +#: src/message.h:76 +#, c-format +msgid "Failed to write into the file %s, cause: %s" +msgstr "ファイル %s への書き込みに失敗しました. 原因: %s" + +#: src/message.h:77 +#, c-format +msgid "Failed to read from the file %s, cause: %s" +msgstr "ファイル %s からの読みとりに失敗しました. 原因: %s" + +#: src/message.h:78 +#, c-format +msgid "Failed to calculate SHA1 digest of or a part of the file %s, cause: %s" +msgstr "" +"ファイル %s の (またはその一部の) SHA1 ダイジェストの計算に失敗しました. 原" +"因: %s" + +#: src/message.h:79 +#, c-format +msgid "Failed to seek the file %s, cause: %s" +msgstr "ファイル %s のシークに失敗しました. 原因: %s" + +#: src/message.h:80 +#, c-format +msgid "The offset is out of range, offset=%lld" +msgstr "オフセット (%lld) が範囲外です." + +#: src/message.h:81 +#, c-format +msgid "%s is not a directory." +msgstr "%s はディレクトリではありません." + +#: src/message.h:82 +#, c-format +msgid "Failed to make the directory %s, cause: %s" +msgstr "ディレクトリ %s を作成できませんでした. 原因: %s" + +#: src/message.h:83 +#, c-format +msgid "Failed to open the segment file %s, cause: %s" +msgstr "セグメントファイル %s をオープンできませんでした. 原因: %s" + +#: src/message.h:84 +#, c-format +msgid "Failed to write into the segment file %s, cause: %s" +msgstr "セグメントファイル %s への書き込みに失敗しました. 原因: %s" + +#: src/message.h:85 +#, c-format +msgid "Failed to read from the segment file %s, cause: %s" +msgstr "セグメントファイル %s からの読み込みに失敗しました. 原因: %s" + +#: src/message.h:87 +#, c-format +msgid "Failed to open a socket, cause: %s" +msgstr "ソケットをオープンできませんでした. 原因: %s" + +#: src/message.h:88 +#, c-format +msgid "Failed to set a socket option, cause: %s" +msgstr "ソケットのオプションの設定に失敗しました. 原因: %s" + +#: src/message.h:89 +#, c-format +msgid "Failed to bind a socket, cause: %s" +msgstr "ソケットの bind に失敗しました. 原因: %s" + +#: src/message.h:90 +#, c-format +msgid "Failed to listen to a socket, cause: %s" +msgstr "ソケットの listen に失敗しました. 原因: %s" + +#: src/message.h:91 +#, c-format +msgid "Failed to accept a peer connection, cause: %s" +msgstr "ピアからの接続の受付に失敗しました. 原因: %s" + +#: src/message.h:92 +#, c-format +msgid "Failed to get the name of socket, cause: %s" +msgstr "ソケットの名前の取得に失敗しました. 原因: %s" + +#: src/message.h:93 +#, c-format +msgid "Failed to get the name of connected peer, cause: %s" +msgstr "接続ピアの名前の取得に失敗しました. 原因: %s" + +#: src/message.h:94 +#, c-format +msgid "Failed to resolve the hostname %s, cause: %s" +msgstr "ホスト名 %s のアドレス解決に失敗しました. 原因: %s" + +#: src/message.h:95 +#, c-format +msgid "Failed to connect to the host %s, cause: %s" +msgstr "ホスト %s への接続に失敗しました. 原因: %s" + +#: src/message.h:96 +#, c-format +msgid "Failed to check whether the socket is writable, cause: %s" +msgstr "" +"ソケットへデータを書き込み可能かどうかのチェックに失敗しました. 原因: %s" + +#: src/message.h:97 +#, c-format +msgid "Failed to check whether the socket is readable, cause: %s" +msgstr "" +"ソケットからデータを読みとり可能かどうかのチェックに失敗しました. 原因: %s" + +#: src/message.h:98 +#, c-format +msgid "Failed to send data, cause: %s" +msgstr "データの送信に失敗しました. 原因: %s" + +#: src/message.h:99 +#, c-format +msgid "Failed to receive data, cause: %s" +msgstr "データの受信に失敗しました. 原因: %s" + +#: src/message.h:100 +#, c-format +msgid "Failed to peek data, cause: %s" +msgstr "データの peek に失敗しました. 原因: %s" + #: src/main.cc:64 #, c-format msgid "" @@ -417,28 +573,22 @@ msgstr "" msgid "" " --http-auth-scheme=SCHEME Set HTTP authentication scheme. Currently, " "basic\n" -" is the only supported scheme. You MUST " -"specify\n" -" this option in order to use HTTP " -"authentication\n" -" as well as --http-user and --http-passwd." +" is the only supported scheme.\n" +" Default: basic" msgstr "" " --http-auth-scheme=SCHEME HTTP での認証方法を指定します. 現在サポートされ" "て\n" -" いるのは basic です. HTTP 認証を使うには, この" -"オ\n" -" プションおよび, --http-user, --http-passwd を指" -"定\n" -" する必要があります." +" いるのは basic です. \n" +" デフォルト値: basic" -#: src/main.cc:188 +#: src/main.cc:187 msgid " --referer=REFERER Set Referer. This affects to all URLs." msgstr "" " --referer=REFERER リファラーを指定します. このオプションはすべて" "の\n" " URL に影響します." -#: src/main.cc:189 +#: src/main.cc:188 msgid "" " --ftp-user=USER Set FTP user. This affects to all URLs.\n" " Default: anonymous" @@ -448,7 +598,7 @@ msgstr "" " はすべての URL に影響します.\n" " デフォルト値: anonymous" -#: src/main.cc:191 +#: src/main.cc:190 msgid "" " --ftp-passwd=PASSWD Set FTP password. This affects to all URLs.\n" " Default: ARIA2USER@" @@ -458,7 +608,7 @@ msgstr "" " ンはすべての URL に影響します.\n" " デフォルト値: ARIA2USER@" -#: src/main.cc:193 +#: src/main.cc:192 msgid "" " --ftp-type=TYPE Set FTP transfer type. TYPE is either " "'binary'\n" @@ -469,11 +619,11 @@ msgstr "" " 'ascii' を指定してください. デフォルト値: " "binary" -#: src/main.cc:196 +#: src/main.cc:195 msgid " -p, --ftp-pasv Use passive mode in FTP." msgstr " -p, --ftp-pasv FTP で passive モードを使用します." -#: src/main.cc:197 +#: src/main.cc:196 msgid "" " --ftp-via-http-proxy=METHOD Use HTTP proxy in FTP. METHOD is either 'get' " "or\n" @@ -486,11 +636,11 @@ msgstr "" "く\n" " ださい. デフォルト値: tunnel" -#: src/main.cc:201 +#: src/main.cc:200 msgid " -T, --torrent-file=TORRENT_FILE The file path to .torrent file." msgstr " -T, --torrent-file=TORRENT_FILE .torrent ファイルのパスを指定." -#: src/main.cc:202 +#: src/main.cc:201 msgid "" " --follow-torrent=true|false Setting this option to false prevents aria2 " "to\n" @@ -505,7 +655,7 @@ msgstr "" " は, BitTorrent モードに入りません.\n" " デフォルト値: true" -#: src/main.cc:206 +#: src/main.cc:205 msgid "" " -S, --show-files Print the file listing in .torrent file and " "exit." @@ -514,7 +664,7 @@ msgstr "" "し\n" " 終了します." -#: src/main.cc:207 +#: src/main.cc:206 msgid "" " --direct-file-mapping=true|false Directly read from and write to each file\n" " mentioned in .torrent file.\n" @@ -525,23 +675,23 @@ msgstr "" " します.\n" " デフォルト値: true" -#: src/main.cc:210 +#: src/main.cc:209 msgid "" " --listen-port Set port number to listen to for peer " "connection." msgstr "" " --listen-port ピアからの接続を受け付けるポート番号を指定." -#: src/main.cc:212 +#: src/main.cc:211 msgid " -v, --version Print the version number and exit." msgstr " -v, --version バージョン番号を表示し, 終了します." -#: src/main.cc:213 +#: src/main.cc:212 msgid " -h, --help Print this message and exit." msgstr "" " -h, --help このヘルプメッセージを表示し, 終了します." -#: src/main.cc:216 +#: src/main.cc:215 msgid "" " You can specify multiple URLs. All URLs must point to the same file\n" " or downloading fails." @@ -550,7 +700,7 @@ msgstr "" "れ\n" " ばなりません. さもなくばダウンロードは失敗します." -#: src/main.cc:220 +#: src/main.cc:219 msgid "" " Specify files in multi-file torrent to download. Use conjunction with\n" " -T option." @@ -559,103 +709,103 @@ msgstr "" "に\n" " 使用する." -#: src/main.cc:223 +#: src/main.cc:222 msgid "Examples:" msgstr "例:" -#: src/main.cc:224 +#: src/main.cc:223 msgid " Download a file by 1 connection:" msgstr " 1 コネクションでのダウンロード:" -#: src/main.cc:226 +#: src/main.cc:225 msgid " Download a file by 2 connections:" msgstr " 2 コネクションでのダウンロード:" -#: src/main.cc:228 +#: src/main.cc:227 msgid " Download a file by 2 connections, each connects to a different server:" msgstr " 二つの異なるサーバーに接続してダウンロード:" -#: src/main.cc:230 +#: src/main.cc:229 msgid " You can mix up different protocols:" msgstr " 異なるプロトコルを混合させてダウンロード:" -#: src/main.cc:233 +#: src/main.cc:232 msgid " Download a torrent:" msgstr "torrent をダウンロード:" -#: src/main.cc:235 +#: src/main.cc:234 msgid " Download a torrent using local .torrent file:" msgstr " ローカル .torrent ファイルを使ってダウンロード:" -#: src/main.cc:237 +#: src/main.cc:236 msgid " Download only selected files:" msgstr " ファイルを指定してダウンロード:" -#: src/main.cc:241 +#: src/main.cc:240 #, c-format msgid "Report bugs to %s" msgstr "バグレポートはこちらへ: %s" -#: src/main.cc:335 +#: src/main.cc:334 msgid "unrecognized proxy format" msgstr "理解できないProxyフォーマットです." -#: src/main.cc:362 +#: src/main.cc:361 msgid "Currently, supported authentication scheme is basic." msgstr "現在サポートされている認証方法は basic です." -#: src/main.cc:371 +#: src/main.cc:370 msgid "retry-wait must be between 0 and 60." msgstr "retry-wait は 0 から 60 の間で指定してください." -#: src/main.cc:388 +#: src/main.cc:387 msgid "ftp-type must be either 'binary' or 'ascii'." msgstr "ftp-type は 'binary' または 'ascii' を指定してください." -#: src/main.cc:397 +#: src/main.cc:396 msgid "ftp-via-http-proxy must be either 'get' or 'tunnel'." msgstr "ftp-via-http-proxy は 'get' または 'tunnel' を指定してください." -#: src/main.cc:415 +#: src/main.cc:414 msgid "min-segment-size invalid" msgstr "min-segment-size が不正です." -#: src/main.cc:426 +#: src/main.cc:425 msgid "http-proxy-method must be either 'get' or 'tunnel'." msgstr "http-proxy-method は 'get' または 'tunnel' を指定してください." -#: src/main.cc:434 +#: src/main.cc:433 msgid "listen-port must be between 1024 and 65535." msgstr "listen-port は 1024 - 65535 の値を指定してください." -#: src/main.cc:445 +#: src/main.cc:444 msgid "follow-torrent must be either 'true' or 'false'." msgstr "follow-torrent は 'true' または 'false を指定してください." -#: src/main.cc:485 +#: src/main.cc:484 msgid "split must be between 1 and 5." msgstr "split は 1 - 5 の値を指定してください." -#: src/main.cc:495 +#: src/main.cc:494 msgid "timeout must be between 1 and 600" msgstr "timeout は 1 - 600 の値を指定してください." -#: src/main.cc:504 +#: src/main.cc:503 msgid "max-tries invalid" msgstr "max-tries が不正です." -#: src/main.cc:533 +#: src/main.cc:532 msgid "specify at least one URL" msgstr "一個以上の URL を指定してください." -#: src/main.cc:540 +#: src/main.cc:539 msgid "daemon failed" msgstr "デーモン起動に失敗" -#: src/main.cc:644 +#: src/main.cc:643 msgid "Files:" msgstr "ファイル:" -#: src/main.cc:667 +#: src/main.cc:666 msgid "Errors occurred while binding port.\n" msgstr "ポートをバインド中にエラーが発生しました.\n" diff --git a/src/AbstractDiskWriter.cc b/src/AbstractDiskWriter.cc index f5682a68..42f23b03 100644 --- a/src/AbstractDiskWriter.cc +++ b/src/AbstractDiskWriter.cc @@ -60,6 +60,7 @@ void AbstractDiskWriter::closeFile() { } void AbstractDiskWriter::openExistingFile(const string& filename) { + this->filename = filename; File f(filename); if(!f.isFile()) { throw new DlAbortEx(EX_FILE_OPEN, filename.c_str(), "file not found"); @@ -71,6 +72,7 @@ void AbstractDiskWriter::openExistingFile(const string& filename) { } void AbstractDiskWriter::createFile(const string& filename, int addFlags) { + this->filename = filename; // TODO proper filename handling needed assert(filename.size()); // if(filename.empty()) { @@ -83,14 +85,14 @@ void AbstractDiskWriter::createFile(const string& filename, int addFlags) { void AbstractDiskWriter::writeDataInternal(const char* data, int len) { if(write(fd, data, len) < 0) { - throw new DlAbortEx(strerror(errno)); + throw new DlAbortEx(EX_FILE_WRITE, filename.c_str(), strerror(errno)); } } int AbstractDiskWriter::readDataInternal(char* data, int len) { int ret; if((ret = read(fd, data, len)) < 0) { - throw new DlAbortEx(strerror(errno)); + throw new DlAbortEx(EX_FILE_READ, filename.c_str(), strerror(errno)); } return ret; } @@ -103,7 +105,7 @@ string AbstractDiskWriter::sha1Sum(long long int offset, long long int length) { char buf[BUFSIZE]; for(int i = 0; i < length/BUFSIZE; i++) { if(BUFSIZE != readData(buf, BUFSIZE, offset)) { - throw "error"; + throw string("error"); } sha1DigestUpdate(ctx, buf, BUFSIZE); offset += BUFSIZE; @@ -111,7 +113,7 @@ string AbstractDiskWriter::sha1Sum(long long int offset, long long int length) { int r = length%BUFSIZE; if(r > 0) { if(r != readData(buf, r, offset)) { - throw "error"; + throw string("error"); } sha1DigestUpdate(ctx, buf, r); } @@ -119,7 +121,7 @@ string AbstractDiskWriter::sha1Sum(long long int offset, long long int length) { sha1DigestFinal(ctx, hashValue); return Util::toHex(hashValue, 20); } catch(string ex) { - throw new DlAbortEx(strerror(errno)); + throw new DlAbortEx(EX_FILE_SHA1SUM, filename.c_str(), strerror(errno)); } #else return ""; @@ -128,7 +130,7 @@ string AbstractDiskWriter::sha1Sum(long long int offset, long long int length) { void AbstractDiskWriter::seek(long long int offset) { if(offset != lseek(fd, offset, SEEK_SET)) { - throw new DlAbortEx(strerror(errno)); + throw new DlAbortEx(EX_FILE_SEEK, filename.c_str(), strerror(errno)); } } diff --git a/src/AbstractDiskWriter.h b/src/AbstractDiskWriter.h index 02d1ff06..41c172e3 100644 --- a/src/AbstractDiskWriter.h +++ b/src/AbstractDiskWriter.h @@ -29,8 +29,8 @@ class AbstractDiskWriter:public DiskWriter { protected: + string filename; int fd; - #ifdef ENABLE_SHA1DIGEST MessageDigestContext ctx; #endif // ENABLE_SHA1DIGEST diff --git a/src/Directory.cc b/src/Directory.cc index d35e67c8..d86b41f2 100644 --- a/src/Directory.cc +++ b/src/Directory.cc @@ -22,6 +22,7 @@ #include "Directory.h" #include "File.h" #include "DlAbortEx.h" +#include "message.h" #include #include #include @@ -39,12 +40,11 @@ void Directory::createDir(const string& parentDir, bool recursive) const { File f(path); if(f.exists()) { if(!f.isDir()) { - throw new DlAbortEx("%s is already exists and it is not a directory.", - path.c_str()); + throw new DlAbortEx(EX_NOT_DIRECTORY, path.c_str()); } } else { if(mkdir(path.c_str(), S_IRUSR|S_IWUSR|S_IXUSR) == -1) { - throw new DlAbortEx(strerror(errno)); + throw new DlAbortEx(EX_MAKE_DIR, path.c_str(), strerror(errno)); } } if(recursive) { diff --git a/src/MultiDiskWriter.cc b/src/MultiDiskWriter.cc index d21cfd60..e3543fe2 100644 --- a/src/MultiDiskWriter.cc +++ b/src/MultiDiskWriter.cc @@ -22,6 +22,7 @@ #include "MultiDiskWriter.h" #include "DlAbortEx.h" #include "Util.h" +#include "message.h" #include MultiDiskWriter::MultiDiskWriter(int pieceLength):pieceLength(pieceLength) { @@ -82,8 +83,7 @@ void MultiDiskWriter::openExistingFile(const string& filename) { } } -void MultiDiskWriter::writeData(const char* data, int len, long long int position) { - long long int offset = position; +void MultiDiskWriter::writeData(const char* data, int len, long long int offset) { long long int fileOffset = offset; bool writing = false; int rem = len; @@ -100,7 +100,7 @@ void MultiDiskWriter::writeData(const char* data, int len, long long int positio } } if(!writing) { - throw new DlAbortEx("offset out of range"); + throw new DlAbortEx(EX_FILE_OFFSET_OUT_OF_RANGE, offset); } } @@ -119,8 +119,7 @@ int MultiDiskWriter::calculateLength(const DiskWriterEntry* entry, long long int return length; } -int MultiDiskWriter::readData(char* data, int len, long long int position) { - long long int offset = position; +int MultiDiskWriter::readData(char* data, int len, long long int offset) { long long int fileOffset = offset; bool reading = false; int rem = len; @@ -138,7 +137,7 @@ int MultiDiskWriter::readData(char* data, int len, long long int position) { } } if(!reading) { - throw new DlAbortEx("offset out of range"); + throw new DlAbortEx(EX_FILE_OFFSET_OUT_OF_RANGE, offset); } return totalReadLength; } @@ -149,7 +148,7 @@ void MultiDiskWriter::hashUpdate(const DiskWriterEntry* entry, long long int off char buf[BUFSIZE]; for(int i = 0; i < length/BUFSIZE; i++) { if(BUFSIZE != entry->diskWriter->readData(buf, BUFSIZE, offset)) { - throw "error"; + throw string("error"); } sha1DigestUpdate(ctx, buf, BUFSIZE); offset += BUFSIZE; @@ -157,7 +156,7 @@ void MultiDiskWriter::hashUpdate(const DiskWriterEntry* entry, long long int off int r = length%BUFSIZE; if(r > 0) { if(r != entry->diskWriter->readData(buf, r, offset)) { - throw "error"; + throw string("error"); } sha1DigestUpdate(ctx, buf, r); } @@ -184,13 +183,13 @@ string MultiDiskWriter::sha1Sum(long long int offset, long long int length) { } } if(!reading) { - throw new DlAbortEx("offset out of range"); + throw new DlAbortEx(EX_FILE_OFFSET_OUT_OF_RANGE, offset); } unsigned char hashValue[20]; sha1DigestFinal(ctx, hashValue); return Util::toHex(hashValue, 20); } catch(string ex) { - throw new DlAbortEx(strerror(errno)); + throw new DlAbortEx(EX_FILE_SHA1SUM, "", strerror(errno)); } #else return ""; diff --git a/src/PreAllocationDiskWriter.cc b/src/PreAllocationDiskWriter.cc index 7bd7dc8f..c5dddea9 100644 --- a/src/PreAllocationDiskWriter.cc +++ b/src/PreAllocationDiskWriter.cc @@ -21,6 +21,7 @@ /* copyright --> */ #include "PreAllocationDiskWriter.h" #include "DlAbortEx.h" +#include "message.h" #include #include #include @@ -43,13 +44,13 @@ void PreAllocationDiskWriter::initAndOpenFile(const string& filename) { int r = totalLength%bufSize; for(long long int i = 0; i < x; i++) { if(write(fd, buf, bufSize) < 0) { - throw new DlAbortEx(strerror(errno)); + throw new DlAbortEx(EX_FILE_WRITE, filename.c_str(), strerror(errno)); } } if(r > 0) { seek(totalLength-r); if(write(fd, buf, r) < 0) { - throw new DlAbortEx(strerror(errno)); + throw new DlAbortEx(EX_FILE_WRITE, filename.c_str(), strerror(errno)); } } } diff --git a/src/SegmentMan.cc b/src/SegmentMan.cc index 1432acbc..e76e40ad 100644 --- a/src/SegmentMan.cc +++ b/src/SegmentMan.cc @@ -122,8 +122,14 @@ void SegmentMan::load() { string segFilename = getSegmentFilePath(); logger->info(MSG_LOADING_SEGMENT_FILE, segFilename.c_str()); FILE* segFile = openSegFile(segFilename, "r+"); - read(segFile); - fclose(segFile); + try { + read(segFile); + fclose(segFile); + } catch(string ex) { + fclose(segFile); + throw new DlAbortEx(EX_SEGMENT_FILE_READ, + segFilename.c_str(), strerror(errno)); + } logger->info(MSG_LOADED_SEGMENT_FILE); for(Segments::iterator itr = segments.begin(); itr != segments.end(); itr++) { @@ -138,22 +144,29 @@ void SegmentMan::save() const { string segFilename = getSegmentFilePath(); logger->info(MSG_SAVING_SEGMENT_FILE, segFilename.c_str()); FILE* segFile = openSegFile(segFilename, "w"); - if(fwrite(&totalSize, sizeof(totalSize), 1, segFile) < 1) { - throw new DlAbortEx(strerror(errno)); - } - for(Segments::const_iterator itr = segments.begin(); itr != segments.end(); itr++) { - if(fwrite(&*itr, sizeof(Segment), 1, segFile) < 1) { - throw new DlAbortEx(strerror(errno)); + try { + if(fwrite(&totalSize, sizeof(totalSize), 1, segFile) < 1) { + throw string("writeError"); } + for(Segments::const_iterator itr = segments.begin(); itr != segments.end(); itr++) { + if(fwrite(&*itr, sizeof(Segment), 1, segFile) < 1) { + throw string("writeError"); + } + } + fclose(segFile); + logger->info(MSG_SAVED_SEGMENT_FILE); + } catch(string ex) { + fclose(segFile); + throw new DlAbortEx(EX_SEGMENT_FILE_WRITE, + segFilename.c_str(), strerror(errno)); } - fclose(segFile); - logger->info(MSG_SAVED_SEGMENT_FILE); } FILE* SegmentMan::openSegFile(const string& segFilename, const string& mode) const { FILE* segFile = fopen(segFilename.c_str(), mode.c_str()); if(segFile == NULL) { - throw new DlAbortEx(strerror(errno)); + throw new DlAbortEx(EX_SEGMENT_FILE_OPEN, + segFilename.c_str(), strerror(errno)); } return segFile; } @@ -161,13 +174,13 @@ FILE* SegmentMan::openSegFile(const string& segFilename, const string& mode) con void SegmentMan::read(FILE* file) { assert(file != NULL); if(fread(&totalSize, sizeof(totalSize), 1, file) < 1) { - throw new DlAbortEx(strerror(errno)); + throw string("readError"); } while(1) { Segment seg; if(fread(&seg, sizeof(Segment), 1, file) < 1) { if(ferror(file)) { - throw new DlAbortEx(strerror(errno)); + throw string("readError"); } else if(feof(file)) { break; } diff --git a/src/SocketCore.cc b/src/SocketCore.cc index 3adcc94c..9002dc1b 100644 --- a/src/SocketCore.cc +++ b/src/SocketCore.cc @@ -20,6 +20,9 @@ */ /* copyright --> */ #include "SocketCore.h" +#include "DlRetryEx.h" +#include "DlAbortEx.h" +#include "message.h" #include #include #include @@ -29,10 +32,7 @@ #include #include #include -#include "DlRetryEx.h" -#include "DlAbortEx.h" #include -#include "message.h" SocketCore::SocketCore():sockfd(-1) { init(); @@ -71,13 +71,13 @@ void SocketCore::beginListen(int port) { //sockfd = socket(AF_UNSPEC, SOCK_STREAM, PF_UNSPEC); sockfd = socket(AF_INET, SOCK_STREAM, 0); if(sockfd == -1) { - throw new DlAbortEx(strerror(errno)); + throw new DlAbortEx(EX_SOCKET_OPEN, strerror(errno)); } socklen_t sockopt = 1; if(setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &sockopt, sizeof(socklen_t)) < 0) { close(sockfd); sockfd = -1; - throw new DlAbortEx(strerror(errno)); + throw new DlAbortEx(EX_SOCKET_SET_OPT, strerror(errno)); } struct sockaddr_in sockaddr; @@ -87,11 +87,11 @@ void SocketCore::beginListen(int port) { sockaddr.sin_port = htons(port); if(bind(sockfd, (struct sockaddr*)&sockaddr, sizeof(sockaddr)) == -1) { - throw new DlAbortEx(strerror(errno)); + throw new DlAbortEx(EX_SOCKET_BIND, strerror(errno)); } if(listen(sockfd, 1) == -1) { - throw new DlAbortEx(strerror(errno)); + throw new DlAbortEx(EX_SOCKET_LISTEN, strerror(errno)); } } @@ -101,7 +101,7 @@ SocketCore* SocketCore::acceptConnection() const { memset((char*)&sockaddr, 0, sizeof(sockaddr)); int fd; if((fd = accept(sockfd, (struct sockaddr*)&sockaddr, &len)) == -1) { - throw new DlAbortEx(strerror(errno)); + throw new DlAbortEx(EX_SOCKET_ACCEPT, strerror(errno)); } SocketCore* s = new SocketCore(fd); @@ -113,7 +113,7 @@ void SocketCore::getAddrInfo(pair& addrinfo) const { memset((char*)&listenaddr, 0, sizeof(listenaddr)); socklen_t len = sizeof(listenaddr); if(getsockname(sockfd, (struct sockaddr*)&listenaddr, &len) == -1) { - throw new DlAbortEx(strerror(errno)); + throw new DlAbortEx(EX_SOCKET_GET_NAME, strerror(errno)); } addrinfo.first = inet_ntoa(listenaddr.sin_addr); addrinfo.second = ntohs(listenaddr.sin_port); @@ -124,7 +124,7 @@ void SocketCore::getPeerInfo(pair& peerinfo) const { memset(&peerin, 0, sizeof(peerin)); int len = sizeof(peerin); if(getpeername(sockfd, (struct sockaddr*)&peerin, (socklen_t*)&len) < 0) { - throw new DlAbortEx(strerror(errno)); + throw new DlAbortEx(EX_SOCKET_GET_PEER, strerror(errno)); } peerinfo.first = inet_ntoa(peerin.sin_addr); peerinfo.second = ntohs(peerin.sin_port); @@ -134,13 +134,13 @@ void SocketCore::establishConnection(const string& host, int port) { closeConnection(); sockfd = socket(AF_INET, SOCK_STREAM, 0); if(sockfd == -1) { - throw new DlAbortEx(strerror(errno)); + throw new DlAbortEx(EX_SOCKET_OPEN, strerror(errno)); } socklen_t sockopt = 1; if(setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &sockopt, sizeof(socklen_t)) < 0) { close(sockfd); sockfd = -1; - throw new DlAbortEx(strerror(errno)); + throw new DlAbortEx(EX_SOCKET_SET_OPT, strerror(errno)); } struct sockaddr_in sockaddr; @@ -159,7 +159,8 @@ void SocketCore::establishConnection(const string& host, int port) { struct addrinfo* res; int ec; if((ec = getaddrinfo(host.c_str(), NULL, &ai, &res)) != 0) { - throw new DlAbortEx(gai_strerror(ec)); + throw new DlAbortEx(EX_RESOLVE_HOSTNAME, + host.c_str(), gai_strerror(ec)); } sockaddr.sin_addr = ((struct sockaddr_in*)res->ai_addr)->sin_addr; freeaddrinfo(res); @@ -168,7 +169,7 @@ void SocketCore::establishConnection(const string& host, int port) { int flags = fcntl(sockfd, F_GETFL, 0); fcntl(sockfd, F_SETFL, flags|O_NONBLOCK); if(connect(sockfd, (struct sockaddr*)&sockaddr, (socklen_t)sizeof(sockaddr)) == -1 && errno != EINPROGRESS) { - throw new DlAbortEx(strerror(errno)); + throw new DlAbortEx(EX_SOCKET_CONNECT, host.c_str(), strerror(errno)); } } @@ -227,7 +228,7 @@ bool SocketCore::isWritable(int timeout) const { if(errno == EINPROGRESS) { return false; } else { - throw new DlRetryEx(strerror(errno)); + throw new DlRetryEx(EX_SOCKET_CHECK_WRITABLE, strerror(errno)); } } } @@ -256,7 +257,7 @@ bool SocketCore::isReadable(int timeout) const { if(errno == EINPROGRESS) { return false; } else { - throw new DlRetryEx(strerror(errno)); + throw new DlRetryEx(EX_SOCKET_CHECK_READABLE, strerror(errno)); } } } @@ -283,7 +284,7 @@ void SocketCore::writeData(const char* data, int len, int timeout) { #else // HAVE_LIBGNUTLS errorMsg = strerror(errno); #endif - throw new DlRetryEx(errorMsg); + throw new DlRetryEx(EX_SOCKET_SEND, errorMsg); } } @@ -309,7 +310,7 @@ void SocketCore::readData(char* data, int& len, int timeout) { #else // HAVE_LIBGNUTLS errorMsg = strerror(errno); #endif - throw new DlRetryEx(errorMsg); + throw new DlRetryEx(EX_SOCKET_RECV, errorMsg); } len = ret; } @@ -336,7 +337,7 @@ void SocketCore::peekData(char* data, int& len, int timeout) { #else // HAVE_LIBGNUTLS errorMsg = strerror(errno); #endif - throw new DlRetryEx(errorMsg); + throw new DlRetryEx(EX_SOCKET_PEEK, errorMsg); } len = ret; } @@ -377,7 +378,7 @@ int SocketCore::gnutlsRecv(char* data, int len) { if(plen < len) { int ret = gnutls_record_recv(sslSession, data+plen, len-plen); if(ret < 0) { - throw new DlRetryEx(gnutls_strerror(ret)); + throw new DlRetryEx(EX_SOCKET_RECV, gnutls_strerror(ret)); } return plen+ret; } else { @@ -393,7 +394,7 @@ int SocketCore::gnutlsPeek(char* data, int len) { memcpy(data, peekBuf, peekBufLength); int ret = gnutls_record_recv(sslSession, data+peekBufLength, len-peekBufLength); if(ret < 0) { - throw new DlRetryEx(gnutls_strerror(ret)); + throw new DlRetryEx(EX_SOCKET_PEEK, gnutls_strerror(ret)); } addPeekData(data+peekBufLength, ret); return peekBufLength; diff --git a/src/TorrentMan.cc b/src/TorrentMan.cc index 1713a86d..48c1b863 100644 --- a/src/TorrentMan.cc +++ b/src/TorrentMan.cc @@ -376,7 +376,7 @@ void TorrentMan::setup(const string& metaInfoFile, const Strings& targetFilePath pieces = totalLength/pieceLength+(totalLength%pieceLength ? 1 : 0); Data* piecesHashData = (Data*)infoDic->get("pieces"); if(piecesHashData->getLen() != pieces*20) { - throw new DlAbortEx("the number of pieces is wrong."); + throw new DlAbortEx("The number of pieces is wrong."); } for(int index = 0; index < pieces; index++) { string hex = Util::toHex((unsigned char*)&piecesHashData->getData()[index*20], 20); @@ -418,7 +418,7 @@ void TorrentMan::setFileFilter(const Strings& filePaths) { for(Strings::const_iterator pitr = filePaths.begin(); pitr != filePaths.end(); pitr++) { if(!diskAdaptor->addDownloadEntry(*pitr)) { - throw new DlAbortEx("no such file entry <%s>", (*pitr).c_str()); + throw new DlAbortEx("No such file entry %s", (*pitr).c_str()); } FileEntry fileEntry = diskAdaptor->getFileEntryFromPath(*pitr); bitfield->addFilter(fileEntry.offset, fileEntry.length); @@ -469,7 +469,8 @@ bool TorrentMan::segmentFileExists() const { FILE* TorrentMan::openSegFile(const string& segFilename, const string& mode) const { FILE* segFile = fopen(segFilename.c_str(), mode.c_str()); if(segFile == NULL) { - throw new DlAbortEx(strerror(errno)); + throw new DlAbortEx(EX_SEGMENT_FILE_OPEN, + segFilename.c_str(), strerror(errno)); } return segFile; } @@ -478,8 +479,14 @@ void TorrentMan::load() { string segFilename = getSegmentFilePath(); logger->info(MSG_LOADING_SEGMENT_FILE, segFilename.c_str()); FILE* segFile = openSegFile(segFilename, "r+"); - read(segFile); - fclose(segFile); + try { + read(segFile); + fclose(segFile); + } catch(string ex) { + fclose(segFile); + throw new DlAbortEx(EX_SEGMENT_FILE_READ, + segFilename.c_str(), strerror(errno)); + } logger->info(MSG_LOADED_SEGMENT_FILE); } @@ -487,27 +494,27 @@ void TorrentMan::read(FILE* file) { assert(file != NULL); unsigned char savedInfoHash[INFO_HASH_LENGTH]; if(fread(savedInfoHash, INFO_HASH_LENGTH, 1, file) < 1) { - throw new DlAbortEx(strerror(errno)); + throw string("readError"); } if(Util::toHex(savedInfoHash, INFO_HASH_LENGTH) != Util::toHex(infoHash, INFO_HASH_LENGTH)) { - throw new DlAbortEx("info hash mismatch"); + throw new DlAbortEx("Incorrect infoHash."); } unsigned char* savedBitfield = new unsigned char[bitfield->getBitfieldLength()]; try { if(fread(savedBitfield, bitfield->getBitfieldLength(), 1, file) < 1) { - throw new DlAbortEx(strerror(errno)); + throw string("readError"); } setBitfield(savedBitfield, bitfield->getBitfieldLength()); if(fread(&downloadLength, sizeof(downloadLength), 1, file) < 1) { - throw new DlAbortEx(strerror(errno)); + throw string("readError"); } if(fread(&uploadLength, sizeof(uploadLength), 1, file) < 1) { - throw new DlAbortEx(strerror(errno)); + throw string("readError"); } preDownloadLength = downloadLength; preUploadLength = uploadLength; delete [] savedBitfield; - } catch(Exception* ex) { + } catch(...) { delete [] savedBitfield; throw; } @@ -520,20 +527,26 @@ void TorrentMan::save() const { string segFilename = getSegmentFilePath(); logger->info(MSG_SAVING_SEGMENT_FILE, segFilename.c_str()); FILE* file = openSegFile(segFilename, "w"); - if(fwrite(infoHash, INFO_HASH_LENGTH, 1, file) < 1) { - throw new DlAbortEx(strerror(errno)); + try { + if(fwrite(infoHash, INFO_HASH_LENGTH, 1, file) < 1) { + throw string("writeError"); + } + if(fwrite(bitfield->getBitfield(), bitfield->getBitfieldLength(), 1, file) < 1) { + throw string("writeError"); + } + if(fwrite(&downloadLength, sizeof(downloadLength), 1, file) < 1) { + throw string("writeError"); + } + if(fwrite(&uploadLength, sizeof(uploadLength), 1, file) < 1) { + throw string("writeError"); + } + fclose(file); + logger->info(MSG_SAVED_SEGMENT_FILE); + } catch(string ex) { + fclose(file); + throw new DlAbortEx(EX_SEGMENT_FILE_WRITE, + segFilename.c_str(), strerror(errno)); } - if(fwrite(bitfield->getBitfield(), bitfield->getBitfieldLength(), 1, file) < 1) { - throw new DlAbortEx(strerror(errno)); - } - if(fwrite(&downloadLength, sizeof(downloadLength), 1, file) < 1) { - throw new DlAbortEx(strerror(errno)); - } - if(fwrite(&uploadLength, sizeof(uploadLength), 1, file) < 1) { - throw new DlAbortEx(strerror(errno)); - } - fclose(file); - logger->info(MSG_SAVED_SEGMENT_FILE); } void TorrentMan::remove() const { diff --git a/src/TrackerWatcherCommand.cc b/src/TrackerWatcherCommand.cc index aaeb5258..a005c882 100644 --- a/src/TrackerWatcherCommand.cc +++ b/src/TrackerWatcherCommand.cc @@ -32,7 +32,7 @@ TrackerWatcherCommand::TrackerWatcherCommand(int cuid, TrackerWatcherCommand::~TrackerWatcherCommand() {} bool TrackerWatcherCommand::execute() { - if(e->torrentMan->trackers == 0 && e->torrentMan->connections < 30) { + if(e->torrentMan->trackers == 0 && e->torrentMan->connections < MIN_PEERS) { e->torrentMan->req->resetTryCount(); if(e->torrentMan->downloadComplete()) { diff --git a/src/TrackerWatcherCommand.h b/src/TrackerWatcherCommand.h index 1151a7b0..14625a9f 100644 --- a/src/TrackerWatcherCommand.h +++ b/src/TrackerWatcherCommand.h @@ -25,6 +25,8 @@ #include "Command.h" #include "TorrentDownloadEngine.h" +#define MIN_PEERS 15 + class TrackerWatcherCommand : public Command { private: TorrentDownloadEngine* e; diff --git a/src/Util.cc b/src/Util.cc index d1405a61..f7d74029 100644 --- a/src/Util.cc +++ b/src/Util.cc @@ -22,6 +22,7 @@ #include "Util.h" #include "DlAbortEx.h" #include "File.h" +#include "message.h" #include #include #include @@ -210,32 +211,32 @@ void Util::rangedFileCopy(const string& dest, const string& src, long long int s int srcFd = -1; try { if((destFd = open(dest.c_str(), O_CREAT|O_WRONLY|O_TRUNC, S_IRUSR|S_IWUSR)) == -1) { - throw new DlAbortEx(strerror(errno)); + throw new DlAbortEx(EX_FILE_OPEN, dest.c_str(), strerror(errno)); } if((srcFd = open(src.c_str(), O_RDONLY, S_IRUSR|S_IWUSR)) == -1) { - throw new DlAbortEx(strerror(errno)); + throw new DlAbortEx(EX_FILE_OPEN, src.c_str(), strerror(errno)); } if(lseek(srcFd, srcOffset, SEEK_SET) != srcOffset) { - throw new DlAbortEx(strerror(errno)); + throw new DlAbortEx(EX_FILE_SEEK, src.c_str(), strerror(errno)); } int x = length/bufSize; int r = length%bufSize; for(int i = 0; i < x; i++) { int readLength; if((readLength = read(srcFd, buf, bufSize)) == -1 || readLength != bufSize) { - throw new DlAbortEx(strerror(errno)); + throw new DlAbortEx(EX_FILE_READ, src.c_str(), strerror(errno)); } if(write(destFd, buf, readLength) == -1) { - throw new DlAbortEx(strerror(errno)); + throw new DlAbortEx(EX_FILE_WRITE, dest.c_str(), strerror(errno)); } } if(r > 0) { int readLength; if((readLength = read(srcFd, buf, r)) == -1 || readLength != r) { - throw new DlAbortEx(strerror(errno)); + throw new DlAbortEx(EX_FILE_READ, src.c_str(), strerror(errno)); } if(write(destFd, buf, r) == -1) { - throw new DlAbortEx(strerror(errno)); + throw new DlAbortEx(EX_FILE_WRITE, dest.c_str(), strerror(errno)); } } close(srcFd); diff --git a/src/main.cc b/src/main.cc index bb3582bd..f87c1068 100644 --- a/src/main.cc +++ b/src/main.cc @@ -182,9 +182,8 @@ void showUsage() { " METHOD is either 'get' or 'tunnel'.\n" " Default: tunnel") << endl; cout << _(" --http-auth-scheme=SCHEME Set HTTP authentication scheme. Currently, basic\n" - " is the only supported scheme. You MUST specify\n" - " this option in order to use HTTP authentication\n" - " as well as --http-user and --http-passwd.") << endl; + " is the only supported scheme.\n" + " Default: basic") << endl; cout << _(" --referer=REFERER Set Referer. This affects to all URLs.") << endl; cout << _(" --ftp-user=USER Set FTP user. This affects to all URLs.\n" " Default: anonymous") << endl; diff --git a/src/message.h b/src/message.h index a7123d96..7da7e483 100644 --- a/src/message.h +++ b/src/message.h @@ -40,10 +40,10 @@ #define MSG_SEND_PEER_MESSAGE_WITH_BITFIELD "CUID#%d - To: %s:%d %s %s" #define MSG_SEND_PEER_MESSAGE_WITH_INDEX_BEGIN_LENGTH "CUID#%d - To: %s:%d %s index=%d, begin=%d, length=%d" #define MSG_RECEIVE_PEER_MESSAGE "CUID#%d - From: %s:%d %s" -#define MSG_GOT_NEW_PIECE "CUID#%d - we got new piece. index=%d" -#define MSG_GOT_WRONG_PIECE "CUID#%d - we got wrong piece. index=%d" +#define MSG_GOT_NEW_PIECE _("CUID#%d - we got new piece. index=%d") +#define MSG_GOT_WRONG_PIECE _("CUID#%d - we got wrong piece. index=%d") -#define MSG_TRACKER_WARNING_MESSAGE "Tracker returned warning message: %s" +#define MSG_TRACKER_WARNING_MESSAGE _("Tracker returned warning message: %s") #define MSG_SEGMENT_FILE_EXISTS _("The segment file %s exists.") #define MSG_SEGMENT_FILE_DOES_NOT_EXIST _("The segment file %s does not exist.") @@ -54,7 +54,7 @@ #define EX_TIME_OUT _("Timeout.") #define EX_INVALID_CHUNK_SIZE _("Invalid chunk size.") -#define EX_TOO_LARGE_CHUNK _("Too large chunk. size = %d") +#define EX_TOO_LARGE_CHUNK _("Too large chunk. size=%d") #define EX_INVALID_HEADER _("Invalid header.") #define EX_INVALID_RESPONSE _("Invalid response.") #define EX_NO_HEADER _("No header found.") @@ -62,16 +62,41 @@ #define EX_PROXY_CONNECTION_FAILED _("Proxy connection failed.") #define EX_CONNECTION_FAILED _("Connection failed.") #define EX_FILENAME_MISMATCH _("The requested filename and the previously registered one are not same. %s != %s") -#define EX_BAD_STATUS _("The response status is not successful. status = %d") -#define EX_TOO_LARGE_FILE _("Too large file size. size = %lld") +#define EX_BAD_STATUS _("The response status is not successful. status=%d") +#define EX_TOO_LARGE_FILE _("Too large file size. size=%lld") #define EX_TRANSFER_ENCODING_NOT_SUPPORTED _("Transfer encoding %s is not supported.") #define EX_SSL_INIT_FAILURE _("SSL initialization failed.") #define EX_SIZE_MISMATCH _("Size mismatch %lld != %lld") -#define EX_AUTH_FAILED "Authorization failed." +#define EX_AUTH_FAILED _("Authorization failed.") #define EX_GOT_EOF _("Got EOF from the server.") -#define EX_EOF_FROM_PEER "Got EOF from peer." -#define EX_MULFORMED_META_INFO "Mulformed meta info." +#define EX_EOF_FROM_PEER _("Got EOF from peer.") +#define EX_MULFORMED_META_INFO _("Mulformed meta info.") -#define EX_FILE_OPEN "Error occurred while opening <%s>, cause: %s" +#define EX_FILE_OPEN _("Failed to open the file %s, cause: %s") +#define EX_FILE_WRITE _("Failed to write into the file %s, cause: %s") +#define EX_FILE_READ _("Failed to read from the file %s, cause: %s") +#define EX_FILE_SHA1SUM _("Failed to calculate SHA1 digest of or a part of the file %s, cause: %s") +#define EX_FILE_SEEK _("Failed to seek the file %s, cause: %s") +#define EX_FILE_OFFSET_OUT_OF_RANGE _("The offset is out of range, offset=%lld") +#define EX_NOT_DIRECTORY _("%s is not a directory.") +#define EX_MAKE_DIR _("Failed to make the directory %s, cause: %s") +#define EX_SEGMENT_FILE_OPEN _("Failed to open the segment file %s, cause: %s") +#define EX_SEGMENT_FILE_WRITE _("Failed to write into the segment file %s, cause: %s") +#define EX_SEGMENT_FILE_READ _("Failed to read from the segment file %s, cause: %s") + +#define EX_SOCKET_OPEN _("Failed to open a socket, cause: %s") +#define EX_SOCKET_SET_OPT _("Failed to set a socket option, cause: %s") +#define EX_SOCKET_BIND _("Failed to bind a socket, cause: %s") +#define EX_SOCKET_LISTEN _("Failed to listen to a socket, cause: %s") +#define EX_SOCKET_ACCEPT _("Failed to accept a peer connection, cause: %s") +#define EX_SOCKET_GET_NAME _("Failed to get the name of socket, cause: %s") +#define EX_SOCKET_GET_PEER _("Failed to get the name of connected peer, cause: %s") +#define EX_RESOLVE_HOSTNAME _("Failed to resolve the hostname %s, cause: %s") +#define EX_SOCKET_CONNECT _("Failed to connect to the host %s, cause: %s") +#define EX_SOCKET_CHECK_WRITABLE _("Failed to check whether the socket is writable, cause: %s") +#define EX_SOCKET_CHECK_READABLE _("Failed to check whether the socket is readable, cause: %s") +#define EX_SOCKET_SEND _("Failed to send data, cause: %s") +#define EX_SOCKET_RECV _("Failed to receive data, cause: %s") +#define EX_SOCKET_PEEK _("Failed to peek data, cause: %s") #endif // _D_MESSAGE_H_