2008年4月14日月曜日

V8 Java 製品のライセンスについて

V8 製品は、これまでの製品とは異なるランタイムライセンスルーチンを使用しています。このため、コンポーネントを標準的な使い方 (IDE 上でのフォームへのドラグ&ドロップ) 以外の方法でご利用いただく場合の処置が旧バージョン製品とは若干異なっています。

この件に関しては、インストール先に licensing.htm という名称で説明文書が残されています。参考のため、以下にその日本語訳を載せておきます。

IP*Works! V8 - ライセンス情報


標準 (ロイヤルティ・フリー) ライセンス
IPWorks コンポーネントは実行時のライセンスチェックに RuntimeLicense という名称のプロパティを使用します。ライセンス済みコンポーネントをフォームにドロップすると、ライセンス文字列が自動的に RuntimeLicense プロパティに割り当てられます。お使いの IDE がこのプロパティを自動的には設定してくれない場合は、このプロパティをソースコードにハードコードすることで、ご利用いただくコンポーネントが正しくライセンスされたものであることを明示します。デザイナを使用しないのであれば、別のプロジェクトを作成してそこから RuntimeLicense プロパティの値を読み取り、その値をコピーしてあなたのアプリケーションにペーストします。なお、同一の製品の同一エディションに含まれる全てのコンポーネントに対し、同一の RuntimeLicense プロパティ値を使用できます。

シングルマシン ライセンス - サーバにシングルマシン ライセンスをインストールする手順
お買い上げ頂いたライセンスがシングルマシン ライセンスであった場合、ライセンスは上記のロイヤルティ・フリー ライセンスとは異なった動作をします。あなたのアプリケーションをサーバ上で初めて実行した際に、有効なライセンスがシステム上で見つからないというエラーが表示されるかもしれません。その場合には、 IPWorks セットアップ時に生成された .lic ファイル (IP*Works! 製品なら ipworks.lic、IP*Works! SSL 製品なら ipworksssl.lic、IP*Works! Zip 製品なら ipworkszip.lic) を、製品の .jar ファイル (IP*Works! 製品なら ipworks.jar、IP*Works! SSL 製品なら ipworksssl.jar, IP*Works! Zip 製品なら ipworkszip.jar) と共に配置する必要があります。この ipworks.lic ファイルはあなたのユーザホームディレクトリ配下の .nsoftware フォルダ内に格納されています。なお、ipworks.lic ファイルはそれを生成したマシンに結び付けられていますので、このファイルを他のマシンにコピーした場合は動作しません。

Unix/Linux およびその他のシステムへのライセンスのインストール
Windows 以外のシステムでは、各コンポーネントは ZIP ファイルにアーカイブされています。アーカイブをオープンし、製品の jar ファイル (IP*Works! 製品なら ipworks.jar、IP*Works! SSL 製品なら ipworksssl.jar, IP*Works! Zip 製品なら ipworkszip.jar) をダブルクリック (あるいはコマンド java -jar ipworks.jar 等を実行) してライセンスをアクティブ化します。なおローヤルティ・フリー ライセンスではこの手順は一度だけ、開発マシン上でのみ実行が求められるのみであり、実行時には各コンポーネントは RuntimeLicense プロパティに格納されたライセンスが使用されます(前述)。

トライアル版ライセンスをインストールする場合も、同じ手順で行います: 製品 jar ファイルをダブルクリック (あるいは java -jar ipworks.jar 等を実行) し、指示に従って処理を進めます。

ライセンスの移転
ライセンスを別のシステムに移転したい場合は、ライセンス移転申請書 (英文) を弊社までお送りください。この申請を行うことにより、別途のインストール行為をライセンス違反と誤認することがなくなります。

製品のアクティブ化に関しより詳しい情報が必要な場合は、弊社の「製品アクティブ化 FAQ (英文)」をご参照ください。

2008年4月11日金曜日

Delphi Edition のリプレース後エラーが発生する件

あるお客様から、Delphi Edition のトライアル版での評価終了後、製品版をインストールしたのだが下記のエラーが出るというお問い合わせを頂きました。

Undeclared Identifier IPWorksSSLLoadDRU
Undeclared Identifier IPWorksSSLFindFunc
Undeclared Identifier IPWorksSSLfreeDRU

このエラーは、旧バージョンの .pas ファイルが Delphi の Lib フォルダ内に残っている場合に発生します。この場合の対応策は以下の通りです。
  1. まず最初に、当該製品をアンインストールします。
  2. C:\Program Files\Borland\[Delphi Version]\Bin に移動し、"dclipwssl6.bpl" ファイルを削除します。
  3. C:\Program Files\Borland\[Delphi Version]\Lib に移動し、.dru および .pas という拡張子のファイルのうち当該コンポーネント用のもの (IP*Works! SSL なら "ips" で始まるもの) を全て削除します。
  4. 最後に IDE がクローズされていることを確認の上、製品版の setup を再度実行します。

FTP によるファイル転送とタイムスタンプ

FTP コンポーネントをお使いのお客様から、「ファイルをサーバにアップロードする際にクライアント側のタイムスタンプをサーバ側に反映できないか」というお問い合わせがありました。

FTP の仕様 (RFC959 および RFC1579) には残念ながらタイムスタンプを扱う機能は規定されておりません。このため、通常の FTP サーバ (特殊な拡張機能を実装されていない FTP サーバ) との間で転送されたファイルは、ファイルが転送された時点のタイムスタンプを持つようになっています。

どうしてもタイムスタンプを保持しなければならないような場合には、タイムスタンプを保持できるアーカイバ (tar や zip 等) でファイルをアーカイブして転送するようにします。この場合、アーカイブファイル自体のタイムスタンプは変更されますが、メンバーファイルのタイムスタンプは保持されておりメンバーファイルには展開時に元のタイムスタンプが付与されます。

アーカイブの作成や展開には、弊社の IP*Works! ZIP 製品をご利用いただけます。

2008年4月10日木曜日

FTP でサーバ側ファイルの存在をチェックする

先の記事ではサーバ側ディレクトリの存在の有無をチェックする方法を紹介しましたが、V8 製品にはサーバ側ファイルの存在をチェックする方法が用意されています。

V8 FTP および FTPS コンポーネントには FileExists プロパティが追加されています。RemoteFile プロパティに調べたいリモートファイル名を設定した後 FileExists プロパティを参照すると、FTP コマンド NLST を用いてサーバ上に当該ファイルが存在するかどうかをチェックします。そしてファイルが存在する場合は FileExists プロパティに true が、存在しない場合には false がセットされます。

なお FileExists でチェックできる対象は「ファイル」のみであり、「ディレクトリ」のチェックはできません。ディレクトリの存在のチェックは現状では先の記事の方法、またはそれに類する方法 (ListDirectoryLong() の戻り値を使って調べる方法) 等で行うことになります。

2008年4月8日火曜日

FTPS と Passive プロパティ

弊社の FTP コンポーネントでは、PORT (Active) モードと PASV (Passive) モードをサポートしており、切り替えは Passive プロパティの値を変更することで行います。(Passive の値が true の時 PASV モード。)

FTPS コンポーネントにもこの Passive プロパティが存在していますが、V6 製品では Passive に false を設定しても必ず PASSIVE モードで接続されます。これはファイアウォール使用時に SSL 接続を PORT モードで行うことは困難だからです。(特に NAT ファイアウォールの場合、リモート側からのデータコネクションで使用するポートを特定することが困難。) このため、SSL 製品のFTPS コンポーネントでは Passive プロパティは互換性のため残したまま、その値の如何にかかわらず常に Passive モードで接続するようになっていました。

ただし、SSL V8 製品では再び Passive プロパティの設定が有効となり、SSL 製品でも PORT モードと PASV モードを選択使用することが可能となっています。これは、Config() で上記の問題に対応できるようになったためです。このために使用する設定は以下の通りです。
  • ftp.Config("PortRange=...");
  • ftp.Config("ActiveModePORTAddress=...");

PortRange 設定により FTPS コンポーネントが PORT モード時にリスンする TCP/IP ポートの範囲を指定し、ActiveModePORTAddress 設定により、PORT コマンドのパラメータとしてサーバ側に通知する IP アドレスとポートを設定します。これにより、PORT コマンドでサーバに通知するアドレスとポートをクライアント PC のものではなくファイアウォールの外側アドレス (およびポート) を設定することが可能となります。そして、ファイアウォールの当該インターフェイスおよびポートへの外部からの接続を、当該クライアントにフォワードするように設定します。

以上により、ファイアウォールがパケットの書き換えを行うことなく外部のサーバと FTP(S) の PORT モード接続を行うことが可能となります。

各設定の詳細については、製品添付のヘルプをご参照ください。

IP*Works! Zip で扱う tar フォーマット

tar ファイルには主として以下のような複数のフォーマットがあります。
  • V7 (Version 7 Unix)
  • 旧 gnu
  • 新 gnu
  • POSIX.1-1988 (ustar)
  • POSIX.1-2001 (posix)
これらのうち、もっとも基本的なものは V7 であり、それ以外のものは V7 のヘッダフォーマットを拡張するか、全く異なる構造になっています。

弊社の tar コンポーネントでは V7 フォーマットと、(本来の V7 にはない) シンボリックリンクの検出機能をサポートしています。その他のフォーマットの場合は、当該フォーマットが V7 の上位互換であり、拡張機能を使用していない部分 (長いファイル名形式や拡張ファイルタイプ) に関しては読み取りおよび展開可能です。

また、弊社製品は他の Windows 版 tar アーカイバ、例えば WinZIP や WinRAR 同様、ファイルの保全および交換を目的としており、取り扱い可能なファイルタイプは
  • 通常のファイル (regular file)
  • 通常のディレクトリ (regular directory)
  • シンボリックリンク

に限定されている点に注意してください。ハードリンクやスペシャルファイル、ボリュームラベル等は WinZIP や WinRAR 同様取り扱うことはできません。
 IP*Works! (tar)WinZIPWinRAR
通常のファイル
ハードリンク×××
シンボリックリンク△1××
キャラクタスペシャルファイル×××
ブロックスペシャルファイル×××
ディレクトリ
FIFOスペシャルファイル×××

△1: 現時点では作成時のみ利用可能。展開時は未サポート。


【注】この表は私が個人的に片手間に調べたものであり、各製品の公式なアナウンスではありません。上記で×になっている機能は標準では利用できないだけで、オプション設定等により利用可能となる可能性もあります。詳細については実際の各製品をご参照ください。

2008年4月4日金曜日

パケットダンプツールについて

TCP/IP 通信ソフトウェアを作成している場合、不具合のチェックにはパケットダンプが必要なことがあります。

弊社のサポートでも、状況の切り分けや確認のためにパケットダンプデータを添えて頂くことで対応が早くなる場合があります。

そのような場合によく使われるツールに Wireshark があります。このソフトウェアは Gnu GPL に基づき配布されているフリーソフトウェアです。

このツールを使用してパケットデータをキャプチャし、フィルタリングして絞り込み、パケットデータの階層表示と16進表示を使って詳細をかなり容易に調査することができます

もしパケットダンプツールをお持ちでないのであれば、Wireshark をお勧めします。