Palm Programmer's Laboratory
Palm OS Programmer's Companion Volume II/1-2
1-2 Exchange Socket 構造体の初期化
Exchange Manager / Exchange ライブラリ / アプリケーション は、それぞれと通信するためにExchange Socket 構造体(ExgSocketType)を使用します。この構造体は、アプリケーションからExchange Manager / Exchange ライブラリ に渡されます。逆にExchange Manager / Exchange ライブラリからアプリケーションに渡されることもあります。(Exchange Manager APIで[ソケット]という単語を使用する場合は、ソケット通信プログラミングにおいて使用される[ソケット]とは無関係です。)アプリケーションがデータを送信するときは、この構造体を生成して適切な情報で初期化する必要があります。データを受信するときは、この構造体は接続及び受け取るデータの情報を提供します。
ExgSocketType構造体の使用は、2つの情報を識別する必要があります。
- 送信を行なうためのExchange library(「Exchange Libraryの識別」を参照)
- 送信するデータの形式(「データ形式の識別」を参照)
ソケット構造体は、他の情報を提供するための他のフィールドを定義します。ExgSocketType構造体の詳細については、Palm OS Programmer's API Referenceを参照して下さい。
重要:ExgSocketType 構造体を初期化するときは、使用しないフィールドに0をセットすること。
Exchange Library の識別
ExgSocketType 構造体は、以下の方法でライブラリを識別します。
- libraryRef フィールドのライブラリ参照番号
- name フィールドのURL(Uniform Resource Locator)
Exchange Manager は最初にライブラリ参照番号をチェックします。0であれば、URLをチェックします。
アプリケーションがデータを送信するときは、どのExchange Libraryを使用するかを識別する必要があります。Exchange Libraryを識別する必要があるのは、Palm OS 4.0 以降だけです。初期のリリースでは1つのExchange Library(赤外線通信用)しか含まれていないので、全てのデータ送信は自動的にそのライブラリで処理されます。Palm OS 4.0 以降でExchange Libraryを識別しない場合は、下位互換性維持のため赤外線ライブラリが使用されます。
ライブラリを識別する際は、ライブラリ参照番号よりもURLを使う方が一般的です。URLスキームは、どのライブラリを使うべきかを特定します。スキームとは、URLのコロン( : )の前の部分のことです。例えば、
http://www.palmos.com
というURLの場合、スキームは"http"です。
Webブラウザに前述のURLを渡すとき、スキームはブラウザに対して『サーバにhttpプロトコルで接続する』ということを教えます。同様に、Exchange Manager にURLを渡すときは、スキームはExchange Manager に対して『どのライブラリを使用するか』ということを教えます。例えば、以下のURLはExchange Manager に対して『リモートのPalmハンドヘルドに赤外線ライブラリを使って接続する』ということを教えます。
_beam:BusinessCard.vcf
Palm OS においては、URLは以下のようなフォーマットになります。
[?]scheme1[;scheme2]....:filename
?
与えられたスキームで一つ以上のExchange Libraryが登録されている場合、Exchange ManagerはどのExchange Libraryを使用するかを送信ダイアログの表示によってユーザに選択させます。
scheme1[;scheme2]...
どのExchange Libraryを使用すべきかを識別するURLスキーム。複数のExchange Libraryがスキームに登録されている場合、URLがクエスチョンマークで始まっていない限りはデフォルトのExchange Libraryが選択されます。
複数のスキームを使用する場合はセミコロンで区切ります。複数スキームは、クエスチョンマークとあわせて使う必要があります。例えば、“?_send;_beam”という文字列によって、Exchange Managerは_sendスキームや_beamスキームをサポートするExchange Libraryの一覧を含む送信ダイアログを表示します。
filename
送信するファイルの名称。どのアプリケーションがデータを受信すべきかを決定するために、必要であれば拡張子を含みます。ファイル拡張子について詳しくは「データ形式の識別」を参照して下さい。
Palm OSはいくつかのURLプレフィックスを、インストールされたExchange Libraryを使って接続するためにどのアプリケーションでも使用することができる、と定義します。URLプレフィックスは、コロンを含んで最も前にきます。表1.3はプレフィックスについての表です。
表1.3 Exchange Library URLプレフィックス
Exchange Library | URLプレフィックス |
---|---|
赤外線ライブラリ | exgBeamPrlfix |
Local Exchange ライブラリ | exgLocalPrlfix |
SMS ライブラリ | kSmsScheme |
_send スキームでサポートされるライブラリ(ユーザの選択) | exgSendPrlfix |
_send スキームまたは_beam スキームでサポートされるライブラリ(ユーザの選択) | exgSendBeamPrlfix |
データ形式の識別
アプリケーションがデータを送信するとき、Exchange Socket 構造体(ExgSocketType)は送信されるデータの形式を識別します。以下の値のうち一つを処理することができます。
- type フィールドのMIME形式。このフィールドは Palm OS 4.0 以降でのみ使用されます。
- name フィールドのファイル拡張子。つまり、name フィールドの値として MyDB.pdb などを設定できます。最後のピリオド( . )以下が拡張子です。
多くの場合、リモート側のどのアプリケーションがデータを受信するかはデータ形式によって決まります。(target フィールドが設定されているなら、どのアプリケーションがデータを受信するかをデータ形式の変わりに決定します。)Exchange Manager は、アプリケーションと各アプリケーションが受信できるデータ形式の登録情報をメンテナンスします。Exchange Manager がオブジェクトを受信するとき、Exchange Manager はデータ形式のために Exchange Socket をチェックします。まず type フィールドをチェックし、そのフィールドが定義されていないかまたはその MIME 形式を受信するためのアプリケーションが登録されていない場合は、続いてファイル拡張子のために name フィールドをチェックします。これについては1-3 データの登録セクションで詳しく説明します。
どのアプリケーションがデータを受信すべきかを直接指定することもできることに注意してください。そのためには、 target フィールドにクリエータIDを設定します。この場合は、MIME 形式やファイル拡張子を指定する必要はありません。target フィールドがゼロ以外のときは、Exchange Manager は受信デバイスにアプリケーションが存在するかどうかをチェックします。もし存在するなら、そのアプリケーションはそれが登録されているかどうかに関わらずデータを受信します。もし対象アプリケーションが存在しないなら、Exchange Manager は通常レジストリを検索します。target フィールドは、Palm Powered ハンドヘルドと通信してどのアプリケーションがデータを受信すべきかを明確に指定したい場合のみに使用してください。
Palm OS 4.0 以降では、アプリケーションは他のアプリケーションのクリエータIDを登録でき、そのクリエータIDに向けられた全てのオブジェクトを受信できます。詳しくは「デフォルトアプリケーションの設定」を参照してください。