GREETINGS AND SALUTATIONS!

サリュテーションのIrDA へのインプリメント

 

 

 

サリュテーションはWindows Socketインターフェースを介してIrDAにインプリメントできます。以下では、このテクニックを説明します。

ソフトウェアの関係

図4は、Salutation Manager(TM)とIrDA Stackおよびその関連アプリケーションとの関係を示しています。この図はクライアント側でもサーバー側でも同じです。Salutation ManagerはIrDAプロトコル・スタックに特有のトランスポート・マネージャを備えており、Salutation APIを介してアプリケーションからアクセスできます。Salutation ManagerはWindows Socketを介してIrDA用のSalutation Protocolを送受信します。以下では、これらのコンポーネント間の通信を説明します。

4: Transport Manager を介した Salutation Manager I rDA Protocol Stack の関係

初期化

Salutation Managerは初期化とともにIrDA Transport Managerを開始し、このTransport ManagerがIRSocket "socket()" APIを呼び出してIRソケットを構築します。サーバー側のTransport Managerは、ソケット・インターフェースを通じてソケットにバインドし、IrDAトランシーバーをlistenモードに設定して、トランシーバーがインバウンド伝送を受け取れるようにします。

Salutation ManagerによるIDの交換

クライアント側のTransport Managerとサービス・デバイスは、他のデバイスをサーチしてサリュテーションに対応しているかどうかを判別します。

サービスのTransport Managerは、SetSocketOpt(IAS_SET)コールを使用し、IrDAスタックのIASレジストりー内にSalutation Manager Identifier (SLM-ID) を設定します。IAS_SET構造体の値は次のようになります。

    irdaClassName = "SLM"

                irdaAttribName = "SLM-ID"

                irdaAttribType = 0x00000001

                irdaAttribute.irdaAttribInt = デバイスに固有のSLM-IDを示す整数

Salutation Architecture Specificationでは、IrDAのSLM-IDは「IrLAPデバイス・アドレス(4オクテット)あとに、16番目のオクテットを通じたランダムな値を追加したもの」として定義されています。IrLAPデバイス・アドレスは完全に一意ではありませんが、IrDAプロトコルのモーバイルな特性とランダム値の長さ(11オクテット)を考慮すれば、SLM-IDは実質的に一意となります。

クライアントのTransport Managerは次のコマンド・ループを使って他のデバイスをサーチします。

            GetSocketOpt(IRLMP_ENUMDEVICES)

他のデバイスが検出されると、GetSocketOptコマンドは応答したデバイスのリストを返します。続いてクライアントのTransport ManagerはGetSockOpt(IAS_QUERY) を使って、検出されたデバイスがサリュテーションに対応しているかどうかを判別します。サリュテーションに対応しているデバイスの場合は、そのSLM-IDの値も検出します。

クライアントのTransport ManagerはSLM-IDと.irdaDeviceIDとの相関関係を確立し、SLM_IDへの要求を.irdaDeviceIDに変換します。

最後にTransport Managerは、検出されたサリュテーション対応の各デバイスに対してIRSockets connect() コマンドを出します。これにより、各サービス・デバイスに新しいソケットハンドルが作成され、このソケットハンドルがクライアントとサービス・デバイスとサービス・デバイスの間にIrDAリンクを確立します。Transport Managerはこのリンクを維持します。

機能のサーチ

上記以外のデバイス間の通信はSalutation APIを介してSalutation Managerによって行われます。

サービス・アプリケーションはslmRegisterCapabilities()コールを使って、デバイスのファンクショナル・ユニットの機能を確かめます。サービスのSalutation Managerはこの情報を保管し、IrDAインターフェースを介して受け取ったサービス要求と比較します。

クライアント・アプリケーションはslmSearchCapabilities()コールを使って、アプリケーションが定めたサーチ基準を満たすデバイスのSLM-IDを判別します。サーチ基準はslmSearchCapabilities()コールに入っているFunctional Unit Description Recordを通じて指定されます。クライアントのSalutation Managerはこの要求をQUERY_CAPABILITIES Salutation Protocolコマンドにパッケージし、IRSockets send() コマンドを使ってサリュテーション対応のすべてのデバイスに送ります。

要求を受け取ったデバイスは、受信したFunctional Unit Description Recordの属性をそのデバイスに登録してある Functional Unit Description Record と比較します。この比較はSalutation Architecture Specificationに定義されているアルゴリズムによって実行されます。比較の結果が肯定的であれば、サービスのSalutation Managerはその応答をQUERY_RESPONSE Salutation Protocolの応答にパッケージし、IRSockets send() コマンドを使ってクライアント・デバイスに送信します。クライアントのTransport Managerは相関テーブルを使って、slmSearchCapabilities()コールへの応答としてアプリケーションに返されたSLM-IDに肯定応答をマップし、Salutation Managerを通じてその結果をクライアントに送ります。

機能のクエリー(問い合わせ)

クライアント・アプリケーションはslmQueryCapabilities()コールを使って、特定のサービス・デバイスの特定の機能を判別します。クライアントはデバイスをSLM-IDによって指定します。ここでもサーチ基準はslmQueryCapabilities()コールに入っているFunctional Unit Description Recordを通じて指定されます。クライアントのSalutation Manager はこの要求をQUERY_CAPABILITIES Salutation Protocolコマンドにパッケージします。クライアントのTransport ManagerはSLM-IDとirdaDeviceIDの相関関係を確立し、IRSockets send()コマンドを使ってQUERY_CAPABILITIESコマンドを指定したデバイスに送ります。

コマンドを受け取ったデバイスは、受信したFunctional Unit Description Recordの属性をそのデバイスに登録してある Functional Unit Description Record と比較します。この比較はSalutation Architecture Specificationに定義されているアルゴリズムによって実行されます。比較の結果が肯定的であれば、サービスのSalutation Managerはその応答をQUERY_RESPONSE Salutation Protocolの応答にパッケージし、IRSockets send() コマンドを使ってクライアント・デバイスに送信します。この情報はクライアントのSalutation Managerを通じてクライアントに返されます。

データ交換

要求したサービスを検出したクライアントは、IRSockets send()コマンドとIRSockets receive()コマンドを使ってデバイスと他のデータを交換できます。通信が完了したら、クライアント・アプリケーションはIRSockets closeSocket()コマンドを呼び出します。

サービス・アプリケーションはslmUnregisterCapabilities Salutation Managerコールを使って、他のデバイスに機能を使わせないように設定できます。

拡張

上述の例では、WinSocketsを介してサリュテーション・アーキテクチャをIrDAに拡張しました。他のソケット・インターフェースを使えば、同じやり方を他のプロトコルにも拡張できます。

Salutation Service Discovery ProtocolのIrDAへの実装に関する最新情報はサリュテーションのWebサイト (www.salutation.org)に掲載していく予定です。