ライブラリ - ソフトウェアライブラリ集
このリポジトリは、私がこれまでに開発したソフトウェアライブラリのコレクションです。その一部は ZPU Evo での使用を目的としています。
現在、ZPU GCC ツールチェーンにはネットワークプログラミングや newlib ライブラリをサポートしていないという問題があります。これにより、UX は ZPU Evo 向けに完全にビルドできませんが、zOS でネットワーク機能とスレッドを実現したいため、解決に努める予定です。
UX ライブラリ
1994年当時、C プログラムの作成には高価なツールキット(Rogue Wave など)を購入し、バグの多いライブラリ API を組み合わせるか、それ自体を一から書くかしかありませんでしたが、それは容易なことではありませんでした。現在では、Java・Perl・Python などの最新言語は非常に豊富なエコシステムを持っています。C/C++ 向けにも、このようなオープンソースのライブラリが存在し、開発を加速させることができますが、探すのに苦労することもあります。 私はこのライブラリを、クライアント向けの C プログラムをより簡単に書けるようにするために開発しました。最終的にはツールキット全体がクライアントに渡されることも多く、彼らのアプリケーション設計の中で大幅に拡張されていきました(ライセンスの都合上、残念ながらその拡張をバックポートすることはできませんでした)。 このライブラリは、Linux・Solaris・Windows 上での C プログラム開発を大幅に容易にし、組み込み開発にも非常に有用です。ZPU Evo はこのツールキットのターゲットの一つであり、それゆえにこのライブラリが再び活用されるに至りました。
UX ライブラリのメソッドは、所属するモジュールごとに以下に記述されています。メソッド名が _ で始まる場合は内部メソッドであり、通常は直接呼び出されません。ただし C 言語にはメソッドやデータに対するプライベート定義がないため、必要であれば呼び出すことも可能です。
ux_cli
Unix または Windows のコマンドライン処理関数。
| 関数: | GetCLIParam |
| 説明: | このプログラムを起動したシェルのコマンドラインから、コマンドラインインターフェース(CLI)パラメータを取得します。 |
| 戻り値: | R_OK - パラメータを取得しました。 R_FAIL - パラメータが存在しません。 |
| プロトタイプ: | int GetCLIParam( int nArgc /* I: Argc または同等のもの */, UCHAR **Argv /* IO: Argv または同等のもの */, UCHAR *szParm /* I: 検索するパラメータフラグ */, UINT nParmType /* I: パラメータの型 (例: int) */, UCHAR *pVar /* O: パラメータ用変数へのポインタ */, UINT nVarLen /* I: pVar が指す領域の長さ */, UINT nZapParam ) /* I: 処理後に引数を削除するか */ |
ux_cmprs
データの圧縮・展開を行うメソッドのセットです。基本的なコードは Linux のパブリックドメイン LZW 圧縮・展開アルゴリズムに由来しており、プログラムへの組み込みを可能にするために多少整理・拡張されています。最終的にはより高度なアルゴリズムを実装する予定ですが、現時点ではこの LZW がテキストに対して非常に高い圧縮率を示しています。
| 関数: | Compress |
| 説明: | テキストバッファを圧縮する汎用関数。 |
| 戻り値: | NULL - メモリ不足。 入力データの圧縮済みコピーを含むメモリバッファ。 |
| プロトタイプ: | UCHAR *Compress( UCHAR *spInBuf /* I: 圧縮対象のバッファ */, UINT *nLen ) /* IO: 圧縮前後のバッファ長 */ |
| 関数: | Decompress |
| 説明: | バッファをテキストに展開する汎用関数。 |
| 戻り値: | NULL - メモリ不足。 入力データの展開済みコピーを含むメモリバッファ。 |
| プロトタイプ: | UCHAR *Decompress( UCHAR *spInBuf /* I: 展開対象のバッファ */, UINT *nCmpLen ) /* IO: 圧縮前後のバッファ長 */ |
| 関数: | WLZW |
| 説明: | データを LZW 形式で書き込み(圧縮)します。 |
| 戻り値: | 0 = 無駄なCPU処理(圧縮なし) -1 = 一般エラー -2 = 論理エラー -3 = 展開エラー >0 = 成功/合計長 |
| プロトタイプ: | int WLZW( byte *si /* I: 圧縮対象データ */, code *so /* O: 圧縮済みデータ */, int len /* I: 圧縮対象データの長さ */, int maxlen ) /* I: 圧縮済みデータの最大長 */ |
| 関数: | RLZW |
| 説明: | LZW 形式のデータを読み込み(展開)します。 |
| 戻り値: | 0 = 無駄なCPU処理(圧縮なし) -1 = 一般エラー -2 = 論理エラー -3 = 展開エラー >0 = 成功/合計長 |
| プロトタイプ: | int RLZW( code *si /* I: 展開対象データ */, byte *so /* O: 展開済みデータ */, int silen /* I: 圧縮済みデータの長さ */, int len ) /* I: 展開後の予想データ長 */ |
ux_comms
汎用ネットワーク通信ルーチン。デーモン機能、接続の受け付け、プロセスとコールバックのスケジューリングの基盤を形成します。
| 関数: | _SL_CalcCRC |
| 説明: | バッファの CRC を計算します。 |
| スレッドセーフ: | はい |
| 戻り値: | 16ビット CRC |
| プロトタイプ: | UINT _SL_CalcCRC( UCHAR *szBuf /* I: CRC を計算するデータバッファ */, UINT nBufLen ) /* I: データバッファの長さ */ |
| 関数: | _SL_CheckCRC |
| 説明: | バッファの CRC を指定値と照合して検証します。 |
| スレッドセーフ: | はい |
| 戻り値: | R_OK - CRC が一致しました。 R_FAIL - CRC が一致しません。 |
| プロトタイプ: | UINT _SL_CheckCRC( UCHAR *szBuf /* I: CRC を計算するデータバッファ */, UINT nBufLen ) /* I: バッファ内のデータ長 */ |
| 関数: | _SL_FdBlocking |
| 説明: | ファイルディスクリプタのブロッキングモードを設定します。 |
| スレッドセーフ: | はい |
| 戻り値: | R_OK - モードを設定しました。 R_FAIL - モードを設定できませんでした。 |
| プロトタイプ: | int _SL_FdBlocking( int nFd /* 操作対象のファイルディスクリプタ*/, int nBlock ) /* ブロッキング (1) または非ブロッキング (0) */ |
| 関数: | _SL_AcceptClient |
| 説明: | クライアントからの受信要求を受け付けます。クライアントの重複テーブルエントリを構築し(存在しない場合)、一意のチャンネル ID を割り当てます。 |
| スレッドセーフ: | いいえ。SL ライブラリスレッドのみが入れます。 |
| 戻り値: | R_OK - 通信機能が初期化されました。 R_FAIL - 初期化に失敗しました。Errno を参照してください。 |
| E_NOMEM - メモリが枯渇しました。 | |
| プロトタイプ: | int _SL_AcceptClient( UINT nServerSd /* I: サーバーソケット ID */, SL_NETCONS *spServer /* I: サーバー記述レコード */, SL_NETCONS **spNewClnt ) /* O: 新しいクライアント */ |
| 関数: | _SL_GetPortNo |
| 説明: | 構造体から有効なポート番号を取得します。 |
| スレッドセーフ: | はい |
| 戻り値: | ポート番号。 |
| プロトタイプ: | UINT _SL_GetPortNo( SL_NETCONS *spNetCon ) /* I: 接続記述 */ |
| 関数: | _SL_Close |
| 説明: | クライアントまたはサーバーの接続を閉じます。 |
| スレッドセーフ: | いいえ。SL スレッドのみが入れます。 |
| 戻り値: | R_OK - 接続を正常に閉じました。 R_FAIL - 接続を閉じることができませんでした。Errno を参照してください。 |
| プロトタイプ: | int _SL_Close( SL_NETCONS *spNetCon /* I: 切断する接続 */, UINT nDoCallback ) /* I: クローズコールバックを実行するか */ |
| 関数: | _SL_ConnectToServer |
| 説明: | リモートサーバーへの接続を試みます。 |
| スレッドセーフ: | いいえ。SL スレッドのみが入れます。 |
| 戻り値: | R_OK - R_FAIL - |
| E_NOMEM - メモリが枯渇しました。 E_NOSOCKET - 接続用ソケットを確保できませんでした。 |
|
| プロトタイプ: | int _SL_ConnectToServer( SL_NETCONS *spNetCon ) |
| 関数: | _SL_ReceiveFromSocket |
| 説明: | 指定されたソケットからデータを受信し、必要に応じて受信バッファを拡張します。 |
| スレッドセーフ: | いいえ。SL スレッドのみが入れます。 |
| 戻り値: | R_OK - R_FAIL - |
| E_NOMEM - メモリが枯渇しました。 E_BADPARM - 不正なパラメータが渡されました。 E_NOSERVICE - ソケット上にサービスがありません。 |
|
| プロトタイプ: | int _SL_ReceiveFromSocket( SL_NETCONS *spNetCon ) /* IO: アクティブな接続 */ |
| 関数: | _SL_ProcessRecvBuf |
| 説明: | ネットワーク接続の受信バッファに保持されているデータを処理します。完全なパケットが組み立てられ、CRC チェックを通過した場合、そのデータをコールバックを通じてサブスクライブ中のアプリケーションに渡します。 |
| スレッドセーフ: | いいえ。SL スレッドのみが入れます。 |
| 戻り値: | R_OK - R_FAIL - |
| E_NOMEM - メモリが枯渇しました。 E_NOSOCKET - 接続用ソケットを確保できませんでした。 |
|
| プロトタイプ: | int _SL_ProcessRecvBuf( SL_NETCONS *spNetCon ) |
| 関数: | _SL_ProcessWaitingPorts |
| 説明: | |
| スレッドセーフ: | いいえ。SL スレッドのみが入れます。 |
| 戻り値: | R_OK - select が成功しました。 R_FAIL - 重大な障害。Errno を参照してください。 |
| E_BADSELECT - select の失敗を引き起こした内部障害。 E_NONWAITING - 処理待ちのソケットがありません。 |
|
| プロトタイプ: | int _SL_ProcessWaitingPorts( ULNG nHibernationPeriod ) /* I: select スリープ */ |
| 関数: | _SL_ProcessCallbacks |
| 説明: | タイマーがアクティブで期限切れになったコールバックを起動します。 |
| スレッドセーフ: | いいえ。SL スレッドのみが入れます。 |
| 戻り値: | 次のコールバックまでの時間(ミリ秒)。 |
| プロトタイプ: | ULNG _SL_ProcessCallbacks( void ) |
| 関数: | SL_HostIPtoString |
| 説明: | 指定された IP アドレスをドット表記の文字列に変換します。 |
| スレッドセーフ: | いいえ。API は同時に1スレッドのみ許可します。 |
| 戻り値: | 16ビット CRC |
| プロトタイプ: | UCHAR *SL_HostIPtoString( ULNG lIPaddr ) /* I: 変換する IP アドレス */ |
| 関数: | SL_GetIPaddr |
| 説明: | ローカルマシンまたは指定されたマシン名のインターネットアドレスを取得します。 |
| スレッドセーフ: | いいえ。API は同時に1スレッドのみ許可します。 |
| 戻り値: | R_OK - IP アドレスを取得しました。 R_FAIL - IP アドレスを取得できませんでした。 |
| プロトタイプ: | int SL_GetIPaddr( UCHAR *szHost /* I: ホスト名文字列 */, ULNG *lIPaddr ) /* O: インターネットアドレスの保存領域 */ |
| 関数: | SL_GetService |
| 説明: | サービスファイルから TCP/UDP サービスのポート番号を取得します。 |
| スレッドセーフ: | いいえ。API 関数は同時に1スレッドのみ許可します。 |
| 戻り値: | R_OK - サービスポートを取得しました。 R_FAIL - サービスポートを取得できませんでした。 |
| プロトタイプ: | int SL_GetService( UCHAR *szService /* I: サービス名文字列 */, UINT *nPortNo ) /* O: ポート番号の保存領域 */ |
| 関数: | SL_Init |
| 説明: | 通信変数を初期化し、必要なソケット接続への接続またはリッスン設定を行います。 |
| スレッドセーフ: | いいえ。API 関数は同時に1スレッドのみ許可します。 |
| 戻り値: | R_OK - 通信機能が初期化されました。 R_FAIL - 初期化に失敗しました。Errno を参照してください。 |
| E_NOMEM - メモリが枯渇しました。 | |
| プロトタイプ: | int SL_Init( UINT nSockKeepAlive /* I: ソケットキープアライブ時間 */, UCHAR *szErrMsg ) /* O: エラーメッセージバッファ */ |
| 関数: | SL_Exit |
| 説明: | プログラム終了または再初期化に備えて通信モジュールを解体します。 |
| スレッドセーフ: | いいえ。API 関数は同時に1スレッドのみ許可します。 |
| 戻り値: | R_OK - 正常に終了しました。 R_FAIL - 終了処理を実行できませんでした。errno を参照してください。 |
| プロトタイプ: | int SL_Exit( UCHAR *szErrMsg ) /* O: エラーメッセージバッファ */ |
| 関数: | SL_PostTerminate |
| 説明: | プログラムをできるだけ早く終了させるリクエストを投稿します。 |
| スレッドセーフ: | はい |
| 戻り値: | なし。 |
| プロトタイプ: | void SL_PostTerminate( void ) |
| 関数: | SL_GetChanId |
| 説明: | 指定された IP アドレスからチャンネル ID を取得します。IP アドレスが存在しないか、まだ接続保留中の場合はエラーとして 0 を返します。 |
| スレッドセーフ: | いいえ。API 関数は同時に1スレッドのみ許可します。 |
| 戻り値: | > 0 - IP アドレスに関連付けられたチャンネル ID。 0 - 関連するチャンネルが見つかりませんでした。 |
| プロトタイプ: | UINT SL_GetChanId( ULNG lIPaddr ) /* I: 変換するアドレス */ |
| 関数: | SL_RawMode |
| 説明: | チャンネルをローモード処理に切り替える、またはローモードから切り替える関数。ローモード処理はあらゆる形式のチェックを省略し、通常は SL ライブラリを使用しないサーバー/クライアントとの接続に使用されます。 |
| スレッドセーフ: | いいえ。API 関数は同時に1スレッドのみ許可します。 |
| 戻り値: | R_FAIL - 不正なチャンネル ID が指定されました。 R_OK - モードを設定しました。 |
| プロトタイプ: | int SL_RawMode( UINT nChanId /* I: 変更を適用するチャンネル */, UINT nMode ) /* I: チャンネルに設定するモード */ |
| 関数: | SL_AddServer |
| 説明: | ネットワーク接続テーブルにサーバーとしてエントリを追加します。エントリを構築し、ソケットを作成してリッスン状態に設定します。 |
| スレッドセーフ: | いいえ。API 関数は同時に1スレッドのみ許可します。 |
| 戻り値: | R_OK - 正常に追加されました。 R_FAIL - エラー。Errno を参照してください。 |
| E_NOMEM - メモリが枯渇しました。 E_BADPARM - 不正なパラメータが渡されました。 E_EXISTS - エントリがすでに存在します。 E_NOSOCKET - ソケットを確保できませんでした。 E_NOLISTEN - 指定ポートでリッスンできませんでした。 |
|
| プロトタイプ: | int SL_AddServer( UINT nPortNo /* I: リッスンするポート */, UINT nForkForAccept /* I: accept 前にフォークするか */, void (*nDataCallback)() /* I: データ受信コールバック */, void (*nCntrlCallback)(int, ...) ) /* I: 制御コールバック */ |
| 関数: | SL_AddClient |
| 説明: | ネットワーク接続テーブルにクライアントとしてエントリを追加します。ソケット作成と接続はカーネルの裁量に委ねます。 |
| スレッドセーフ: | いいえ。API 関数は同時に1スレッドのみ許可します。 |
| 戻り値: | >= 0 - チャンネル ID。 -1 - エラー。Errno を参照してください。 |
| E_NOMEM - メモリが枯渇しました。 E_EXISTS - 同じ内容のクライアントがすでに存在します。 |
|
| プロトタイプ: | int SL_AddClient( UINT nServerPortNo /* I: 通信に使用するサーバーポート */, ULNG lServerIPaddr /* I: サーバー IP アドレス */, UCHAR *szServerName /* I: サーバー名 */, void (*nDataCallback)() /* I: データ受信コールバック */, void (*nCntrlCallback)(int, ...) ) /* I: 制御コールバック */ |
| 関数: | SL_AddTimerCB |
| 説明: | タイマーコールバックを追加します。タイマーコールバックとは、一定時間後に呼び出される関数です。この関数は、一度だけ呼び出す(TCB_ONESHOT)、Xミリ秒ごとに呼び出す(TCB_ASTABLE)、または最終実行から固定時間 Xミリ秒後に呼び出す(TCB_FLIPFLOP)ことができます。各コールバックには定義済みの変数またはポインタを渡せるため、同じコールバック関数の複数のインスタンスを、それぞれ異なる値を渡す形で共存させることが可能です。コールバックは動的リンクリストで管理されます。 |
| スレッドセーフ: | いいえ。API 関数は同時に1スレッドのみ許可します。 |
| 戻り値: | R_OK - コールバックを正常に追加しました。 R_FAIL - 失敗。Errno を参照してください。 |
| E_NOMEM - メモリが枯渇しました。 | |
| プロトタイプ: | int SL_AddTimerCB( ULNG lTimePeriod, /* I: コールバック間隔 */, UINT nOptions /* I: コールバックのオプションフラグ */, ULNG lCBData /* I: コールバックに渡すデータ */, void (*nCallback)() ) /* I: 呼び出す関数 */ |
| 関数: | SL_DelServer |
| 説明: | ネットワーク接続テーブルからエントリを削除し、それに関連する実際の通信を無効化します。 |
| スレッドセーフ: | いいえ。API 関数は同時に1スレッドのみ許可します。 |
| 戻り値: | R_OK - 正常に削除されました。 R_FAIL - エラー。Errno を参照してください。 |
| E_BADPARM - 不正なパラメータが渡されました。 | |
| プロトタイプ: | int SL_DelServer( UINT nPortNo ) /* I: サーバーが使用しているポート番号 */ |
| 関数: | SL_DelClient |
| 説明: | ネットワーク接続テーブルからクライアントエントリを削除し、使用していたすべてのリソースを解放します。 |
| スレッドセーフ: | いいえ。API 関数は同時に1スレッドのみ許可します。 |
| 戻り値: | R_OK - クライアント接続を正常に閉じました。 R_FAIL - エラー。Errno を参照してください。 |
| プロトタイプ: | int SL_DelClient( UINT nChanId ) /* I: 削除するクライアントのチャンネル ID */ |
| 関数: | SL_Close |
| 説明: | 指定されたチャンネル ID に基づいてソケット接続(クライアントまたはサーバー)を閉じます。ソケットライブラリの性質上、これを即座に実行することはできません。なぜなら、クローズを要求するアプリケーションはほぼ常にソケットライブラリのコールバック内にあり、その状態で内部構造を変更することは危険を伴うためです。 |
| スレッドセーフ: | いいえ。API 関数は同時に1スレッドのみ許可します。 |
| 戻り値: | なし。 |
| プロトタイプ: | int SL_Close( UINT nChanId ) /* I: 閉じるチャンネル ID */ |
| 関数: | SL_SendData |
| 説明: | チャンネル ID で識別された指定の宛先にデータパケットを送信します。 |
| スレッドセーフ: | いいえ。API 関数は同時に1スレッドのみ許可します。 |
| 戻り値: | R_OK - データを正常に送信しました。 R_FAIL - データを送信できませんでした。Errno を参照してください。 |
| E_INVCHANID - 無効なチャンネル ID。 E_BUSY - チャンネルが使用中です。後で再試行してください。 E_BADSOCKET - ソケットの内部障害。致命的エラー。 E_NOSERVICE - リモート接続がまだ確立されていません。 |
|
| プロトタイプ: | int SL_SendData( UINT nChanId /* I: データを送信するチャンネル ID */, UCHAR *szData /* I: 送信するデータ */, UINT nDataLen ) /* I: データの長さ */ |
| 関数: | SL_BlockSendData |
| 説明: | 指定された宛先にデータパケットを送信し、終了前に確実に送信されることを保証します。エラーが発生した場合は呼び出し元に返します。 |
| スレッドセーフ: | いいえ。API 関数は同時に1スレッドのみ許可します。 |
| 戻り値: | R_OK - データを正常に送信しました。 R_FAIL - データを送信できませんでした。Errno を参照してください。 |
| E_INVCHANID - 無効なチャンネル ID。 E_BADSOCKET - ソケットの内部障害。致命的エラー。 E_NOSERVICE - リモート接続がまだ確立されていません。 |
|
| プロトタイプ: | int SL_BlockSendData( UINT nChanId /* I: データを送信するチャンネル ID */, UCHAR *szData /* I: 送信するデータ */, UINT nDataLen ) /* I: データの長さ */ |
| 関数: | SL_Poll |
| 説明: | UX に CPU 制御を渡すことができないプログラム向けの関数。このポーリング関数を頻繁に呼び出すことで、このような種類のアプリケーションが通信処理を行えるようにします。 |
| スレッドセーフ: | いいえ。API 関数は同時に1スレッドのみ許可します。 |
| 戻り値: | R_OK - システムがシャットダウン中です。R_FAIL - 重大な障害。Errno を参照してください。 |
| プロトタイプ: | int SL_Poll( ULNG lSleepTime ) |
| 関数: | SL_Kernel |
| 説明: | アプリケーションのプロセス制御がこの関数に委ねられ、時間とイベントの割り当て・管理を行います。アプリケーションはこのライブラリにコールバックを登録し、イベントが発生したり時間が経過したりするとそれらが呼び出されます。アプリケーションの完了とともに制御がこの関数から戻ります。 |
| スレッドセーフ: | いいえ。メインスレッドまたは1つの制御スレッドを想定しています。 |
| 戻り値: | R_OK - システムがシャットダウン中です。 R_FAIL - 重大な障害。Errno を参照してください。 |
| プロトタイプ: | int SL_Kernel( void ) |
ux_lgr
汎用スタンドアロン(プログラム可能な)ロギングユーティリティ。
| 関数: | Lgr |
| 説明: | メッセージをフラットファイル、データベース、またはその両方に記録する関数。 |
| 戻り値: | なし。 |
| プロトタイプ: | void Lgr( int nLevel /* I: エラーメッセージのレベルまたはコマンド */, ... ) /* I: 可変引数 */ |
ux_linkl
リンクリストの作成・削除・検索などを行うリンクリスト関数ライブラリ。
| 関数: | AddItem |
| 説明: | リンクリストを構成するシンプルなメカニズム。リンクは片方向のみで、アイテムはリストの末尾にのみ追加されます。 |
| 戻り値: | R_OK - アイテムを正常に追加しました。 R_FAIL - 追加に失敗しました。Errno を参照してください。 |
| E_NOMEM - メモリが枯渇しました。 E_BADHEAD - ヘッドポインタが不正です。 E_BADTAIL - テールポインタが不正です。 E_NOKEY - 検索キーが提供されていません。 |
|
| プロトタイプ: | int AddItem( LINKLIST **spHead /* IO: リストの先頭へのポインタ */, LINKLIST **spTail /* IO: リストの末尾へのポインタ */, int nMode /* I: リンクへの追加モード */, UINT *nKey /* I: 整数型検索キー */, ULNG *lKey /* I: long 型検索キー */, UCHAR *szKey /* I: 文字列型検索キー */, void *spData ) /* I: 保持データのアドレス */ |
| 関数: | DelItem |
| 説明: | 指定されたリンクリストから要素を削除します。保持されているデータは解放されません。呼び出し元が割り当てたものであるため、解放は呼び出し元の責任です。 |
| 戻り値: | R_OK - アイテムを正常に削除しました。 R_FAIL - 削除に失敗しました。Errno を参照してください。 |
| E_BADHEAD - ヘッドポインタが不正です。 E_BADTAIL - テールポインタが不正です。 E_MEMFREE - システムプールへのメモリ解放に失敗しました。 E_NOKEY - 検索キーが提供されていません。 |
|
| プロトタイプ: | int DelItem( LINKLIST **spHead /* IO: リストの先頭へのポインタ */, LINKLIST **spTail /* IO: リストの末尾へのポインタ */, void *spKey /* I: アイテムのアドレス(直接更新) */, UINT *nKey /* I: 整数型検索キー */, ULNG *lKey /* I: long 型検索キー */, UCHAR *szKey ) /* I: 文字列型検索キー */ |
| 関数: | FindItem |
| 説明: | 指定されたリンクリストから要素を検索します。 |
| 戻り値: | NOTNULL - アイテムが見つかりました。アドレスを返します。 NULL - アイテムが見つかりません。Errno を参照してください。 |
| E_BADHEAD - ヘッドポインタが不正です。 E_BADTAIL - テールポインタが不正です。 E_NOKEY - 検索キーが提供されていません。 |
|
| プロトタイプ: | void *FindItem( LINKLIST *spHead /* I: リストの先頭へのポインタ */, UINT *nKey /* I: 整数型検索キー */, ULNG *lKey /* I: long 型検索キー */, UCHAR *szKey ) /* I: 文字列型検索キー */ |
| 関数: | StartItem |
| 説明: | リスト全体をスキャンするためのポインタを設定します。リストの先頭にある「データアイテム」を呼び出し元に返します。 |
| 戻り値: | NOTNULL - アイテムが見つかりました。アドレスを返します。 NULL - アイテムが見つかりません。Errno を参照してください。 |
| E_BADHEAD - ヘッドポインタが不正です。 | |
| プロトタイプ: | void *StartItem( LINKLIST *spHead /* I: リストの先頭へのポインタ */, LINKLIST **spNext ) /* O: リスト内の次のアイテムへのポインタ */ |
| 関数: | NextItem |
| 説明: | 指定されたリストの次のアイテムに移動します。現在の「データアイテム」を呼び出し元に返します。 |
| 戻り値: | NOTNULL - アイテムが見つかりました。アドレスを返します。 NULL - アイテムが見つかりません。Errno を参照してください。 |
| E_BADPARM - 不正なパラメータが渡されました。 | |
| プロトタイプ: | void *NextItem( LINKLIST **spNext ) /* O: リスト内の次のアイテムへのポインタ */ |
| 関数: | MergeLists |
| 説明: | 2つのリストを結合します。ソースリストがターゲットリストにマージされます。必要に応じてリストは再ソートされます。 |
| 戻り値: | R_OK - アイテムを正常に追加しました。 R_FAIL - 追加に失敗しました。Errno を参照してください。 |
| E_NOMEM - メモリが枯渇しました。 E_BADHEAD - ヘッドポインタが不正です。 E_BADTAIL - テールポインタが不正です。 E_NOKEY - 検索キーが提供されていません。 |
|
| プロトタイプ: | int MergeLists( LINKLIST **spDstHead, /* IO: 宛先リストの先頭へのポインタ */, LINKLIST **spDstTail /* IO: 宛先リストの末尾へのポインタ */, LINKLIST *spSrcHead /* I: ソースリストの先頭へのポインタ */, LINKLIST *spSrcTail /* I: ソースリストの末尾へのポインタ */, int nMode ) /* I: リストのマージモード */ |
| 関数: | DelList |
| 説明: | リスト全体を削除し、リストおよびその中に保持されているデータが使用するメモリを解放します。 |
| 戻り値: | R_OK - リストを正常に削除しました。 R_FAIL - リストの削除に失敗しました。Errno を参照してください。 |
| E_BADHEAD - ヘッドポインタが不正です。 E_BADTAIL - テールポインタが不正です。 |
|
| プロトタイプ: | int DelList( LINKLIST **spHead /* IO: リストの先頭へのポインタ */, LINKLIST **spTail ) /* IO: リストの末尾へのポインタ */ |
| 関数: | SizeList |
| 説明: | 指定されたリストをスキャンして要素の総数を求めます。 |
| 戻り値: | R_OK - リストのサイズを計算しました。 R_FAIL - リストのサイズの計算に失敗しました。Errno を参照してください。 |
| E_BADHEAD - ヘッドポインタが不正です。 | |
| プロトタイプ: | int SizeList( LINKLIST *spHead /* I: リストの先頭へのポインタ */, UINT *nCnt ) /* O: リスト内の要素数 */ |
ux_mon
インタラクティブモニター機能。これらの機能を組み込んだ実行中のアプリケーションに対して、ユーザーが発行できる一連のインタラクティブコマンド(HTML または自然言語)を提供します。
| 関数: | _ML_HTMLDefaultCB |
| 説明: | HTML インタープリターのデフォルトハンドラー。基本的に「未実装」メッセージをクライアントに送信します。 |
| 戻り値: | なし。 |
| プロトタイプ: | int _ML_HTMLDefaultCB( UINT nChanId /* I: クライアントへの送信 ID*/, UCHAR *szData /* I: データバッファ */, UINT nDataLen ) /* I: データバッファの長さ */ |
| 関数: | _ML_InterpretHTMLRequest |
| 説明: | 外部クライアント(Web ブラウザなど)からのバッファに HTML リクエストが含まれています。比較と推論によって一連のアクションに解釈します。 |
| 戻り値: | なし。 |
| プロトタイプ: | UINT _ML_InterpretHTMLRequest( ML_MONLIST *spMon /* I: モニター記述 */, ML_CONLIST *spCon /* I: 接続記述 */, UCHAR *szData ) /* I: コマンドバッファ */ |
| 関数: | _ML_InterpretNLRequest |
| 説明: | 外部クライアントからのバッファに自然言語コマンドリクエストが含まれています。比較によって一連のアクションに解釈します。 |
| 戻り値: | なし。 |
| プロトタイプ: | UINT _ML_InterpretNLRequest( ML_MONLIST *spMon /* I: モニター記述 */, ML_CONLIST *spCon /* I: 接続記述 */, UCHAR *szData ) /* I: コマンドバッファ */ |
| 関数: | _ML_MonitorCB |
| 説明: | 外部クライアントがコマンドを発行している際、コマンドデータはこの関数に配信され処理されます。 |
| 戻り値: | なし。 |
| プロトタイプ: | void _ML_MonitorCB( UINT nChanId /* I: データを受信したチャンネル */, UCHAR *szData /* I: データを含むバッファ */, UINT nDLen ) /* I: バッファ内のデータ長 */ |
| 関数: | _ML_MonitorCntrl |
| 説明: | インタラクティブモニター制御関数。外部クライアントとの接続が確立または切断されたとき、この関数が処理を要求されます。 |
| 戻り値: | なし。 |
| プロトタイプ: | void _ML_MonitorCntrl( int nType /* I: コールバックの種類 */, ... ) /* I: 種類に応じた引数リスト */ |
| 関数: | _ML_MonTerminate |
| 説明: | プログラム自身を終了させるインタラクティブモニターコマンド。 |
| 戻り値: | なし。 |
| プロトタイプ: | int _ML_MonTerminate( UINT nChanId /* I: IM セッションへのチャンネル */, UCHAR *szBuf /* I: 入力行の残余部分 */, UINT nBufLen ) /* I: 入力行の長さ */ |
| 関数: | ML_Init |
| 説明: | リモートユーザーがこの実行中プログラムに接続してコマンドを発行できるようにするための機能をすべて初期化します。 |
| 戻り値: | なし。 |
| プロトタイプ: | int ML_Init( UINT nMonPort /* I: モニターサービスのポート */, UINT nServiceType /* I: モニターサービスの種類(HTML など) */, UCHAR *szServerName /* I: HTTP サーバー名レスポンス */, int (*nConnectCB)() /* I: クライアント接続時のコールバック */, int (*nDisconCB)() /* I: クライアント切断時のコールバック */, int (*nInterpretOvr)()) /* I: 組み込みインタープリターオーバーライド関数 */ |
| 関数: | ML_Exit |
| 説明: | プログラム終了または再初期化に備えてモニターモジュールを解体します。 |
| 戻り値: | R_OK - 正常に終了しました。 R_FAIL - 終了処理を実行できませんでした。errno を参照してください。 |
| プロトタイプ: | int ML_Exit( UCHAR *szErrMsg ) /* O: エラーメッセージバッファ */ |
| 関数: | ML_Send |
| 説明: | 指定されたリモートセッションにデータを送信します。 |
| 戻り値: | なし。 |
| プロトタイプ: | int ML_Send( UINT nChanId /* I: IM セッションへのチャンネル */, UCHAR *szBuf /* I: 送信データ */, UINT nBufLen ) /* I: 送信データの長さ */ |
| 関数: | ML_AddMonCommand |
| 説明: | インタラクティブモニターの認識済み予約語データベースにコマンドを追加します。外部ユーザーからコマンドが届いたとき、予約語リストと照合して検証・識別します。 |
| 戻り値: | R_OK - コマンドを追加しました。 R_FAIL - コマンドを追加できませんでした。errno を参照してください。 |
| プロトタイプ: | int ML_AddMonCommand( UINT nMonPort /* I: サービスモニターポート */, UCHAR *szCommand /* I: テキスト形式のコマンド */, int (*nCallback)()) /* I: コマンドコールバック */ |
| 関数: | ML_DelMonCommand |
| 説明: | モニターチャンネルの認識済み単語データベースで現在アクティブなコマンドを削除します。 |
| 戻り値: | R_OK - コマンドを削除しました。 R_FAIL - コマンドを削除できませんでした。errno を参照してください。 |
| プロトタイプ: | int ML_DelMonCommand( UINT nMonPort, /* I: サービスモニターポート */, UCHAR *szCommand ) /* I: 削除するコマンド */ |
| 関数: | ML_Broadcast |
| 説明: | リッスン中のすべてのモニタープロセスにメッセージをブロードキャストします。 |
| 戻り値: | R_OK - 一部またはすべてに正常に送信しました。 R_FAIL - どこにも送信できませんでした。Errno を参照してください。 |
| プロトタイプ: | int ML_Broadcast( UCHAR *szData /* I: 送信するデータ */, UINT nDataLen ) /* I: データの長さ */ |
ux_str
汎用文字列処理関数。C ライブラリに存在する関数への追加機能。
| 関数: | PutCharFromLong |
| 説明: | long 型変数を既知のバイト順序で文字バッファに配置します。例えば long は 32 ビットであり、MSB (3)、2、1、LSB (0) の順で文字バッファに配置されます。MSB はバッファの先頭バイトに入ります。 |
| 戻り値: | R_OK - 失敗することはありません……そう思っていたいところですが。 |
| プロトタイプ: | int PutCharFromLong( UCHAR *pDestBuf /* O: 宛先バッファ */, ULNG lVar ) /* I: long 型変数 */ |
| 関数: | PutCharFromInt |
| 説明: | int 型変数を既知のバイト順序で文字バッファに配置します。例えば int は 16 ビットであり、MSB (1)、LSB (0) の順で文字バッファに配置されます。MSB はバッファの先頭バイトに入ります。 |
| 戻り値: | R_OK - 失敗することはありません……上記コメント参照。 |
| プロトタイプ: | int PutCharFromInt( UCHAR *pDestBuf /* O: 宛先バッファ */, UINT lVar ) /* I: int 型変数 */ |
| 関数: | GetLongFromChar |
| 説明: | 文字バッファから long 型変数を取得します。バッファ内のバイト順序は 32 ビット、MSB(3)、2、1、LSB(0) であると仮定し、MSB はバッファの先頭バイトに入ります。 |
| 戻り値: | R_OK - 失敗することはありません……そう思っていたいところですが。 |
| プロトタイプ: | ULNG GetLongFromChar( UCHAR *pDestBuf ) /* I: 変換するソースバッファ */ |
| 関数: | GetIntFromChar |
| 説明: | 文字バッファから long 型変数を取得します。バッファ内のバイト順序は 16 ビット、MSB(1)、LSB(0) であると仮定し、MSB はバッファの先頭バイトに入ります。 |
| 戻り値: | R_OK - 失敗することはありません……そう思っていたいところですが。 |
| プロトタイプ: | UINT GetIntFromChar( UCHAR *pDestBuf ) /* I: 変換するソースバッファ */ |
| 関数: | StrPut |
| 説明: | 文字列を別の文字列の中に配置します。strcpy と同じですが、宛先文字列を終端しません。 |
| 戻り値: | R_OK - 失敗することはありません……そう思っていたいところですが。 |
| プロトタイプ: | UINT StrPut( UCHAR *spDestBuf /* I: コピー先バッファ */, UCHAR *spSrcBuf /* I: コピー元バッファ */, UINT nBytes ) /* I: コピーするバイト数 */ |
| 関数: | FFwdOverWhiteSpace |
| 説明: | 入力バッファ内の空白文字を超えてポインタを前進させます。 |
| 戻り値: | なし。 |
| プロトタイプ: | void FFwdOverWhiteSpace( UCHAR *szInBuf /* I: 入力データバッファ */, UINT *nPos ) /* IO: バッファ内の開始位置と終了位置 */ |
| 関数: | ParseForToken |
| 説明: | 入力バッファから次のトークンを解析します。トークンには、英字・英数字の単語、数値、単一文字、または文字列が含まれます。 |
| 戻り値: | 検出されたトークンの種類。 |
| プロトタイプ: | UINT ParseForToken( UCHAR *szInBuf /* I: 入力バッファ */, UINT *nPos /* IO: バッファ内の現在位置 */, UCHAR *szTokBuf ) /* O: トークン出力バッファ */ |
| 関数: | ParseForString |
| 説明: | 入力バッファから次の有効な文字列を取得します。 |
| 戻り値: | なし。 |
| プロトタイプ: | int ParseForString( UCHAR *szInBuf /* I: 入力バッファ */, UINT *nPos /* I: 入力バッファ内の位置 */, UCHAR *szOutBuf ) /* O: 文字列の格納先バッファ */ |
| 関数: | ParseForInteger |
| 説明: | 入力バッファから次の有効な整数を取得します。 |
| 戻り値: | なし。 |
| プロトタイプ: | int ParseForInteger( UCHAR *szInBuf /* I: 入力バッファ */, UINT *nPos /* I: 入力バッファ内の位置 */, UINT *nMin /* I: 許容最小値 */, UINT *nMax /* I: 許容最大値 */, int *pOutInt ) /* O: 整数の格納先バッファ */ |
| 関数: | ParseForLong |
| 説明: | 入力バッファから次の有効な Long 値を取得します。 |
| 戻り値: | なし。 |
| プロトタイプ: | int ParseForLong( UCHAR *szInBuf /* I: 入力バッファ */, UINT *nPos /* I: 入力バッファ内の位置 */, long *lMin /* I: 許容最小値 */, long *lMax /* I: 許容最大値 */, long *pOutLong ) /* O: Long 値の格納先バッファ */ |
| 関数: | StrRTrim |
| 説明: | 指定された文字列の末尾にある空白をすべて除去する関数。ヌル終端文字列の末尾から始め、最初の非空白文字を探します。その新しい位置にヌル終端文字を配置します。 |
| 戻り値: | 新しい文字列へのポインタ。 |
| プロトタイプ: | char *StrRTrim( char *szSrc ) /* IO: トリムするベース文字列 */ |
| 関数: | StrCaseCmp |
| 説明: | 文字の大小に関わらず文字列比較を実行する関数。主にそのような機能を持たないオペレーティングシステム向けに提供されています。 |
| 戻り値: | 0 - 文字列が一致しました。 > 0 < 0 |
| プロトタイプ: | int StrCaseCmp( const char *szSrc /* I: 比較基準のベース文字列 */, const char *szCmp ) /* I: 比較対象文字列 */ |
| 関数: | StrnCaseCmp |
| 説明: | 両文字列の指定バイト数分について、文字の大小に関わらず文字列比較を実行する関数。主にそのような機能を持たないオペレーティングシステム向けに提供されています。 |
| 戻り値: | 0 - 文字列が一致しました。 > 0 < 0 |
| プロトタイプ: | int StrnCaseCmp( const char *szSrc /* I: 比較基準のベース文字列 */, const char *szCmp /* I: 比較対象文字列 */, size_t nCount ) /* I: 比較するバイト数 */ |
| 関数: | SplitFQFN |
| 説明: | 完全修飾ファイル名をディレクトリコンポーネントとファイル名コンポーネントに分割する関数。 |
| 戻り値: | R_OK - ファイル名を分割しました。 R_FAIL - メモリなどのエラーにより分割できませんでした。 |
| プロトタイプ: | int SplitFQFN( char *szFQFN /* I: 完全修飾ファイル名 */, char **szDir /* O: ディレクトリコンポーネント */, char **szFN ) /* O: ファイル名コンポーネント */ |
UX テストプログラムの例
この例はリポジトリの ux_test フォルダにあります。
````c /**************************
- Product: ####### ####### ##### ####### # # ####### # #
-
# # # # ## ## # # ##
-
# # # # # # # # # # #
-
##### ##### # # # # # # # #
-
# # # # # # # # #
-
# # # # # # # # #
-
####### ##### # ####### # # ####### #
*
- File: test_mon.c
- Description: A Test Harness program specifically for testing out ux
- monitor functionality. Ie the ability to add an interactive
- monitor to any application. *
- Version: %I%
- Dated: %D%
- Copyright: P.D. Smart, 1996-2019. *
- History: 1.0 - Initial Release. * **************************
- This source file is free software: you can redistribute it and#or modify
- it under the terms of the GNU General Public License as published
- by the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version. *
- This source file is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details. *
- You should have received a copy of the GNU General Public License
- along with this program. If not, see http://www.gnu.org/licenses/. **************************/
/* システムヘッダファイルを読み込む。
*/
#include
/* UX ヘッダファイルを読み込む。
*/
#include
/* Solaris 向けの特別定義。 */ #if defined(SOLARIS) || defined(LINUX) || defined(ZPU) #include <sys/types.h> #endif
/* ヘッダの特定事項のために C モジュールであることを示す。 */ #define TEST_MON_C
/* ローカル固有のヘッダファイルを読み込む。 */ #include “test_mon.h”
/**************************
- Function: _HTML_GetHandler
- Description: デフォルトの HTML GET ハンドラーをオーバーライドするコールバック。
- この関数はクライアントブラウザが要求するものを判断し、
- それを満たそうとします。 *
- Returns: R_OK - 設定を取得しました。
- R_FAIL - 失敗。エラーメッセージを参照してください。 **************************/ int _HTML_GetHandler( UINT nChanId, /* I: 新規接続のチャンネル ID / UCHAR *szData, / I: WWW が受信したデータ / UINT nMonPort ) / I: モニターポート番号 / { / ローカル変数。 */ int nCnt=0; int nChar; UINT nPos = 0; UINT nTokType; UCHAR *spEndStr; UCHAR *spMsgBuf = NULL; UCHAR szFileName[MAX_FILENAMELEN+1]; char *szFunc = “_HTML_GetHandler”; FILE *fp;
/* この接続の詳細を示すデバッグメッセージをログに記録する。
*/
Lgr(LOG_DEBUG, szFunc,
"GET Handler called: Data=%s, nChanId=%d, MonPort=%d\n",
szData, nChanId, nMonPort);
/* HTML コンテンツタイプを設定する。
*/
ML_Send(nChanId, "Content-type: text/html\n\n", 0);
/* ブラウザのストリーム終端として認識される HTTP/バージョンをバッファから検索する。
* 存在しない場合、クライアントにエラーメッセージを送信して終了する。
*/
if( (spMsgBuf=(UCHAR *)malloc((strlen(szData)*3)+1)) == NULL )
{
/* メモリ枯渇により失敗して終了する。
*/
ML_Send(nChanId, "<HTML><TITLE>Out of Memory</TITLE>"
"Out of Memory, Re-Try Later</HTML>/n/n", 0);
if(spMsgBuf != NULL) free(spMsgBuf);
return(R_FAIL);
}
if((spEndStr=strstr(szData, "HTTP")) != NULL)
{
/* 理解する必要があるコマンドはバッファの先頭から HTTP が始まる部分
* までの間にある。それを抽出する。
*/
FFwdOverWhiteSpace(szData, &nPos);
strncpy(spMsgBuf, &szData[nPos], ((spEndStr - szData)-nPos));
spMsgBuf[(spEndStr - szData)-nPos] = '\0';
} else
{
/* できることがないため、クライアントにエラーメッセージを送信する。
*/
ML_Send(nChanId, "<HTML><TITLE>Illegal HTML</TITLE>"
"The HTML that your browser issued is illegal, or it is from"
" a newer version not supported by this product</HTML>\n\n", 0);
return(R_FAIL);
}
/* 余分な部分を取り除いてファイルを開く。
*/
strcpy(szFileName, StrRTrim(spMsgBuf));
if((fp=fopen(szFileName, "r")) == NULL)
{
sprintf(spMsgBuf, "<HTML><TITLE>Cannot access %s</TITLE>"
"<H1>File Not Available</H1>\n"
"The file requested (%s) cannot be accessed.</HTML>\n\n",
szFileName, szFileName);
ML_Send(nChanId, spMsgBuf, 0);
return(R_FAIL);
} else
{
/* 簡素だが効果的。1 バイトずつ読み込み、HTML 構造に
* 包んで送信する。
*/
ML_Send(nChanId, "<HTML>\n<BODY><PRE>\n", 0);
spMsgBuf[1]='\0';
while((nChar=fgetc(fp)) != EOF)
{
nCnt++;
spMsgBuf[0]=nChar;
ML_Send(nChanId, spMsgBuf, 1);
}
ML_Send(nChanId, "</PRE></BODY></HTML>", 0);
fclose(fp);
}
/* 完了、終了!
*/
return(R_OK); }
/**************************
- Function: _HTML_ConnectCB
- Description: 着信した WWW ブラウザが接続を確立したときのコールバック。 *
- Returns: R_OK - 設定を取得しました。
- R_FAIL - 失敗。エラーメッセージを参照してください。 **************************/ int _HTML_ConnectCB( UINT nChanId, /* I: 新規接続のチャンネル ID / UINT nMonPort ) / I: モニターポート番号 / { / ローカル変数。 */ char *szFunc = “_HTML_ConnectCB”;
/* この接続の詳細を示すデバッグメッセージをログに記録する。
*/
Lgr(LOG_DEBUG, szFunc, "New Connection: ChanID=%d, MonPort=%d\n",
nChanId, nMonPort);
/* 完了、終了!
*/
return; }
/**************************
- Function: _HTML_DisconnectCB
- Description: 既存の WWW ブラウザ接続が切断されたときのコールバック。 *
- Returns: R_OK - 設定を取得しました。
- R_FAIL - 失敗。エラーメッセージを参照してください。 **************************/ int _HTML_DisconnectCB( UINT nChanId, /* I: 新規接続のチャンネル ID / UINT nMonPort ) / I: モニターポート番号 / { / ローカル変数。 */ char *szFunc = “_HTML_DisconnectCB”;
/* この接続の詳細を示すデバッグメッセージをログに記録する。
*/
Lgr(LOG_DEBUG, szFunc, "Connection Closed: ChanID=%d, MonPort=%d\n",
nChanId, nMonPort);
/* 完了、終了!
*/
return; }
/**************************
- Function: _NL_HelpHandler
- Description: 自然言語コマンドインターフェースに HELP 機能を実装するコールバック。
- このコマンドはコマンドの引数に応じてグローバルまたは
- 個別のヘルプを一覧表示し、クライアントに返送します。 *
- Returns: R_OK - 設定を取得しました。
- R_FAIL - 失敗。エラーメッセージを参照してください。 **************************/ int _NL_HelpHandler( UINT nChanId, /* I: 新規接続のチャンネル ID / UCHAR *szData, / I: WWW が受信したデータ / UINT nMonPort ) / I: モニターポート番号 / { / ローカル変数。 */ char *szFunc = “_NL_HelpHandler”;
/* この接続の詳細を示すデバッグメッセージをログに記録する。
*/
Lgr(LOG_DEBUG, szFunc,
"Help Handler called: Data=%s, nChanId=%d, MonPort=%d\n",
szData, nChanId, nMonPort);
/* 完了、終了!
*/
return(R_OK); }
/**************************
- Function: _NL_ConnectCB
- Description: 着信した WWW ブラウザが接続を確立したときのコールバック。 *
- Returns: R_OK - 設定を取得しました。
- R_FAIL - 失敗。エラーメッセージを参照してください。 **************************/ int _NL_ConnectCB( UINT nChanId, /* I: 新規接続のチャンネル ID / UINT nMonPort ) / I: モニターポート番号 / { / ローカル変数。 */ char *szFunc = “_NL_ConnectCB”;
/* この接続の詳細を示すデバッグメッセージをログに記録する。
*/
Lgr(LOG_DEBUG, szFunc, "New Connection: ChanID=%d, MonPort=%d\n",
nChanId, nMonPort);
/* 完了、終了!
*/
return; }
/**************************
- Function: _NL_DisconnectCB
- Description: 既存の WWW ブラウザ接続が切断されたときのコールバック。 *
- Returns: R_OK - 設定を取得しました。
- R_FAIL - 失敗。エラーメッセージを参照してください。 **************************/ int _NL_DisconnectCB( UINT nChanId, /* I: 新規接続のチャンネル ID / UINT nMonPort ) / I: モニターポート番号 / { / ローカル変数。 */ char *szFunc = “_NL_DisconnectCB”;
/* この接続の詳細を示すデバッグメッセージをログに記録する。
*/
Lgr(LOG_DEBUG, szFunc, "Connection Closed: ChanID=%d, MonPort=%d\n",
nChanId, nMonPort);
/* 完了、終了!
*/
return; }
/**************************
- Function: GetConfig
- Description: OS またはコマンドラインフラグから設定情報を取得する。 *
- Returns: R_OK - 設定を取得しました。
- R_FAIL - 失敗。エラーメッセージを参照してください。 **************************/ int GetConfig( int argc, /* I: CLI 引数の数 / UCHAR **argv, / I: CLI 引数の内容 / char **envp, / I: 環境変数 / UCHAR *szErrMsg ) / O: 生成されたエラーメッセージ / { / ローカル変数。 */ int nReturn = R_OK; FILE *fp; UCHAR *szFunc = “GetConfig”;
/* ユーザーがログファイルを使用するかどうかを確認する。
*/
if( GetCLIParam(argc, argv, FLG_LOGFILE, T_STR, TMON.szLogFile,
MAX_LOGFILELEN, FALSE) == R_OK )
{
/* ファイル名が有効かどうかを確認する。
*/
if((fp=fopen(TMON.szLogFile, "a")) == NULL)
{
sprintf(szErrMsg, "Cannot write to logfile (%s)", TMON.szLogFile);
return(R_FAIL);
}
/* テスト完了のためファイルを閉じる。
*/
fclose(fp);
} else
{
/* OS に応じたデフォルトのログファイルを設定する。
*/
strcpy(TMON.szLogFile, DEF_LOGFILE);
}
/* コマンドラインからログモードを取得する。
*/
if(GetCLIParam(argc, argv, FLG_LOGMODE, T_INT, (UCHAR *)&TMON.nLogMode,
0, 0) == R_OK)
{
/* モードの妥当性を確認する。
*/
if((TMON.nLogMode < LOG_OFF || TMON.nLogMode > LOG_FATAL) &&
TMON.nLogMode != LOG_CONFIG)
{
sprintf(szErrMsg, "Illegal Logger mode (%d)", TMON.nLogMode);
return(R_FAIL);
}
} else
{
/* デフォルトのログモードを設定する。
*/
TMON.nLogMode = LOG_DEBUG;
}
/* HTML モニタリングに使用するポートを取得する。
*/
if(GetCLIParam(argc, argv, FLG_HTMLPORT, T_INT, (UCHAR *)&TMON.nHtmlPort,
0, 0) == R_OK)
{
/* ポートの妥当性を確認する。
*/
if((TMON.nHtmlPort < 2000 || TMON.nHtmlPort > 10000))
{
sprintf(szErrMsg, "Illegal HTML TCP Port (%d)", TMON.nHtmlPort);
return(R_FAIL);
}
} else
{
/* デフォルトポートを設定する。
*/
TMON.nHtmlPort = DEF_HTML_PORT;
}
/* HTML モニタリングに使用するポートを取得する。
*/
if(GetCLIParam(argc, argv, FLG_NLPORT, T_INT, (UCHAR *)&TMON.nNLPort,
0, 0) == R_OK)
{
/* ポートの妥当性を確認する。
*/
if((TMON.nNLPort < 2000 || TMON.nNLPort > 10000))
{
sprintf(szErrMsg, "Illegal Natural Language TCP Port (%d)",
TMON.nNLPort);
return(R_FAIL);
}
} else
{
/* デフォルトポートを設定する。
*/
TMON.nNLPort = DEF_NL_PORT;
}
/* 完了、終了!
*/
return( nReturn ); }
SDD ライブラリ
サーバー・データソース・ドライバー・ライブラリ(SDD)は、データソースと通信するための API セットです。現在、以下のドライバーが実装されています:
- オーディオ再生 - 厳密にはデータソースではなくデータターゲットですが、SDD ライブラリは双方向の性質を持ちます。
- FTP - ファイル転送プロトコル(FTP)を介してリモートソースとのデータ送受信を可能にします。
- Java - データの提供と受信のためにリモートソース上で Java プログラムを実行できます。データソースが標準的でない場合に有用です。
- ODBC - Open Database Connectivity ドライバーがサポートするすべてのデータベースへの接続を可能にします。
- SCMD - システムコマンド。リモートサーバー上で Linux、Solaris、Windows のシステムコマンドを実行してデータの抽出や受信ができます。
- SYBC - Sybase データベース。データの格納と抽出のために Sybase データベースへのネイティブ接続を可能にします。
追加のドライバーは templates/ ディレクトリにあるテンプレートを使用して作成できます。
ドライバーは MDC 層を通じて、または特定のデータソースを使用したいアプリケーション(例:SCMD ドライバーを介してリモートサーバーにコマンドを発行する管理アプリケーション — Ansible の初期版とも言えます)から直接開くことができます。
SDD ライブラリのメソッドは、それぞれが属するドライバーごとに分類して以下に説明します。メソッド名が「_」で始まる場合は内部メソッドであり、通常は直接呼び出しません。ただし C 言語の性質上、メソッドやデータに対するプライベート定義は存在しないため、必要であれば呼び出すことも可能です。
オーディオドライバー sdd_aupl
| 関数: | _AUPL_GetStrArg |
| 説明: | 入力バッファをスキャンして、文字列ベースの引数を抽出する関数。 |
| 戻り値: | SDD_FAIL- 引数を取得できませんでした。 SDD_OK - 引数を取得しました。 |
| プロトタイプ: | int _AUPL_GetStrArg( UCHAR *snzDataBuf /* I: Input buffer */, int nDataLen /* I: Len of data */, UCHAR *szArg /* I: Arg to look for */, UCHAR **pszPath ) /* O: Pointer to argument */ |
| 関数: | _AUPL_ValidatePath |
| 説明: | パスの存在を検証する関数。 |
| 戻り値: | SDD_FAIL- PATH を検証できませんでした。 SDD_OK - PATH を検証しました。 |
| プロトタイプ: | int _AUPL_ValidatePath( UCHAR *pszPath ) /* I: Path to validate */ |
| 関数: | _AUPL_ValidateFile |
| 説明: | ファイルの存在を検証する、またはファイルが作成可能であることを検証する関数。 |
| 戻り値: | SDD_FAIL- ファイル名を取得または検証できませんでした。 SDD_OK - ファイル名を取得して検証しました。 |
| プロトタイプ: | int _AUPL_ValidateFile( UCHAR *pszPath /* I: Path to file */, UCHAR *pszFile /* I: File to validate */, UINT nWriteFlag ) /* I: Read = 0, Write = 1 */ |
| 関数: | _AUPL_PlayZ |
| 説明: | 圧縮されたオーディオファイルを再生する関数。子プロセスを起動してアタッチする方式を採用しています。子プロセスが実際の展開処理を行い、標準出力を通じてデータを親プロセスの標準入力にフィードバックします。データはラウンドロビン方式でバッファリングされ、オーディオ DSP ハードウェアに供給されます。 |
| 戻り値: | SDD_FAIL- 実行中にコマンドが失敗しました。 SDD_OK - コマンドが正常に実行されました。 |
| プロトタイプ: | int _AUPL_PlayZ( UCHAR *pszAudioPath /* I: Path to Audio File */, UCHAR *pszAudioFile /* I: Audio Filename */, int (*fSendDataCB)(UCHAR *, UINT) /* I: Func for returning data */, UCHAR *szErrMsg ) /* O: Error message generated */jjjjj |
| 関数: | aupl_InitService |
| 説明: | ドライバーを定義済みの状態に初期化するエントリーポイント。ドライバーが正しく機能するために、他のすべての関数の前にこの関数を呼び出すことが必須です。呼び出し元は 2 種類のデータを提供します。1) 自己初期化に使用するデータを含む構造体、2) 初期化を完了できない場合にドライバーがエラーメッセージを格納するバッファへのポインター。 |
| 戻り値: | SDD_FAIL- ドライバーの初期化中にエラーが発生し、szErrStr にエラーメッセージが格納されています。 SDD_OK - ドライバーが正常に初期化されました。 |
| プロトタイプ: | int aupl_InitService( SERVICEDETAILS *sServiceDet /* I: Init data */, UCHAR *szErrStr ) /* O: Error message */ |
| 関数: | aupl_CloseService |
| 説明: | ドライバーのクローズダウンを実行するエントリーポイント。クローズダウン手順により、ドライバーは初期状態(電源投入時のような状態)に戻り、InitService を再度呼び出すことができます。 |
| 戻り値: | SDD_FAIL- ドライバーのクローズ中にエラーが発生し、szErrStr にエラーメッセージが格納されています。 SDD_OK - ドライバーが正常にクローズされました。 |
| プロトタイプ: | int aupl_CloseService( UCHAR *szErrMsg ) /* O: Error message if failed */ |
| 関数: | aupl_ProcessRequest |
| 説明: | ドライバーにリクエストの処理を開始させるためのドライバーへのエントリーポイント。リクエストと関連パラメーターを表すデータブロックがパラメーターとしてドライバーに渡されます。構造体内のデータは元のクライアントとこのドライバーコードにのみ関連します。 |
| 戻り値: | SDD_FAIL- リクエストの処理中にドライバー内でエラーが発生しました。エラーテキストを参照してください。 SDD_OK - リクエストが正常に処理されました。 |
| プロトタイプ: | int aupl_ProcessRequest( UCHAR *snzDataBuf /* I: Input data */, int nDataLen /* I: Len of data */, int (*fSendDataCB)(UCHAR *, UINT) /* I: CB to send reply*/, UCHAR *szErrMsg ) /* O: Error text */ |
| 関数: | aupl_ProcessOOB |
| 説明: | 現在の動作状態に関連する可能性のある帯域外コマンドを処理するためのドライバーへのエントリーポイント。この関数の役割はコマンドを解読して即座に対応することです。例えば、キャンセルコマンドは処理中の ProcessRequest を中断してクリーンアップします。 |
| 戻り値: | 戻り値なし。 |
| プロトタイプ: | void aupl_ProcessOOB( UCHAR nCommand ) /* I: OOB Command */ |
FTP プロトコルドライバー sdd_ftpx
| 関数: | _FTPX_GetStrArg |
| 説明: | 入力バッファをスキャンして、文字列ベースの引数を抽出する関数。 |
| 戻り値: | SDD_FAIL- 引数を取得できませんでした。 SDD_OK - 引数を取得しました。 |
| プロトタイプ: | int _FTPX_GetStrArg( UCHAR *snzDataBuf /* I: Input buffer */, int nDataLen /* I: Len of data */, UCHAR *szArg /* I: Arg to look for */, UCHAR **pszPath ) /* O: Pointer to argument */ |
| 関数: | _FTPX_GetMode |
| 説明: | 入力バッファをスキャンして、呼び出し元が要求する FTP 動作モード(バイナリまたは ASCII)を判定する関数。モードが指定されていない場合はバイナリをデフォルトとします。 |
| 戻り値: | モードフラグ - 1 = バイナリモードが選択されました。 - 0 = ASCII モードが選択されました。 |
| プロトタイプ: | int _FTPX_GetMode( UCHAR *snzDataBuf /* I: Input buffer */, int nDataLen ) /* I: Len of data */ |
| 関数: | _FTPX_GetWriteData |
| 説明: | 入力バッファをスキャンし、データが含まれているか検証して、データを抽出してオープンしたファイルストリームに格納し、そのブロックが最終ブロックであれば開始フラグを設定する関数。 |
| 戻り値: | SDD_FAIL- 不正なデータブロックまたはファイルへの書き込みエラー。 SDD_OK - ブロックを取得して格納しました。 |
| プロトタイプ: | int _FTPX_GetWriteData( UCHAR *snzDataBuf /* I: Input buffer */, int nDataLen /* I: Len of data */, FILE *fpFile /* IO: Opened file stream */, int *nLast /* O: Last block flag */, UCHAR *szErrMsg ) /* O: Any resultant error msg */ |
| 関数: | _FTPX_PutReadData |
| 説明: | オープンしたストリームを読み取り、コールバックメカニズムを介してデータの内容を呼び出し元に送信する関数。 |
| 戻り値: | SDD_FAIL- PATH を取得できませんでした。 SDD_OK - PATH を取得しました。 |
| プロトタイプ: | int _FTPX_PutReadData( FILE *fpFile /* I: Stream to read from */, int (*fSendDataCB)(UCHAR *, UINT) /* I: CB to send data to */, UCHAR *szErrMsg ) /* O: Error text */ |
| 関数: | _FTPX_PIDataCB |
| 説明: | FTP サーバーから返される制御情報を処理する関数。 |
| 戻り値: | 戻り値なし。 |
| プロトタイプ: | void _FTPX_PIDataCB( UINT nChanId /* I: Channel data arrived on */, UCHAR *szData /* I: Actual data */, UINT nDataLen ) /* I: Length of data */ |
| 関数: | _FTPX_PICtrlCB |
| 説明: | FTP サーバーとの接続中に発生する制御コールバックを処理する関数。 |
| 戻り値: | 戻り値なし。 |
| プロトタイプ: | void _FTPX_PICtrlCB( int nType /* I: Type of callback */, ... ) /* I: Var args */ |
| 関数: | _FTPX_DTPDataCB |
| 説明: | データ転送接続で FTP サーバーから返されるデータを処理する関数。 |
| 戻り値: | 戻り値なし。 |
| プロトタイプ: | void _FTPX_DTPDataCB( UINT nChanId /* I: Channel data arrived on */, UCHAR *szData /* I: Actual data */, UINT nDataLen ) /* I: Length of data */ |
| 関数: | _FTPX_DTPCtrlCB |
| 説明: | FTP サーバーとのデータ転送接続における制御コールバックを処理する関数。 |
| 戻り値: | 戻り値なし。 |
| プロトタイプ: | void _FTPX_DTPCtrlCB( int nType /* I: Type of callback */, ... ) /* I: Var args */ |
| 関数: | _FTPX_PIGetResponse |
| 説明: | FTP サーバーからレスポンスコードを取得する関数。 |
| 戻り値: | レスポンスコード。 |
| プロトタイプ: | int _FTPX_PIGetResponse( void ) |
| 関数: | _FTPX_PISendCmd |
| 説明: | FTP サーバーにコマンドを送信する関数。 |
| 戻り値: | SDD_FAIL - FTP サーバーが応答しませんでした。szErrMsg を参照してください。 SDD_OK - コマンドが正常に送信されました。 |
| プロトタイプ: | int _FTPX_PISendCmd( UCHAR *szCmd /* I: Command to send */, UINT *panReqResponses /* I: Array of req resp */, UCHAR *szErrMsg ) /* O: Error message */ |
| 関数: | _FTPX_PIGetDTPResponse |
| 説明: | DTP 転送中のレスポンスコードを取得する関数。 |
| 戻り値: | レスポンスコード。 |
| プロトタイプ: | int _FTPX_PIGetDTPResponse( void ) |
| 関数: | _FTPX_PISendDTPCmd |
| 説明: | データ転送のための DTP チャネルを起動する FTP サーバーへのコマンドを送信する関数。 |
| 戻り値: | SDD_FAIL - FTP サーバーが応答しませんでした。szErrMsg を参照してください。 SDD_OK - コマンドが正常に送信されました。 |
| プロトタイプ: | int _FTPX_PISendDTPCmd( UCHAR *szCmd /* I: Command to send */, UINT *panReqResponses /* I: Allowed responses */, UCHAR *szErrMsg ) /* O: Error message */ |
| 関数: | _FTPX_SetMode |
| 説明: | FTP サーバーとドライバー間の転送モードを設定する関数。 |
| 戻り値: | SDD_FAIL - 転送モードの設定に失敗しました。重大なエラーです。 SDD_OK - モードが設定されました。 |
| プロトタイプ: | int _FTPX_SetMode( UINT nBinaryMode /* I: Select binary mode = TRUE */, UCHAR *szErrMsg ) /* O: Generated error messages */ |
| 関数: | _FTPX_SetCwd |
| 説明: | FTP サーバーのカレントワーキングディレクトリを設定する関数。 |
| 戻り値: | SDD_FAIL - 指定されたディレクトリの設定に失敗しました。 SDD_OK - カレントワーキングディレクトリが設定されました。 |
| プロトタイプ: | int _FTPX_SetCwd( UCHAR *szPath /* I: Path to set CWD */, UCHAR *szErrMsg ) /* O: Generated error messages */ |
| 関数: | _FTPX_FTPInit |
| 説明: | FTP サーバーとの接続を初期化する関数。呼び出し元はサーバーの名前または IP アドレス、および接続を完了するためのユーザー名とパスワードを提供します。 |
| 戻り値: | SDD_FAIL - 指定された情報で接続を確立できませんでした。 SDD_OK - FTP 接続が確立されました。 |
| プロトタイプ: | int _FTPX_FTPInit( UCHAR *szFTPServer /* I: Name of FTP server */, UCHAR *szUserName /* I: User name to login with */, UCHAR *szPassword /* I: Password for login */, UCHAR *szErrMsg ) /* O: Error message if failed */ |
| 関数: | _FTPX_FTPClose |
| 説明: | 接続中の FTP 接続をクローズして、次のタスクに備えて後処理を行う関数。 |
| 戻り値: | SDD_FAIL - 正常にクローズできませんでした。ライブラリは再使用できません。 SDD_OK - クローズしました。 |
| プロトタイプ: | int _FTPX_FTPClose( UCHAR *szErrMsg ) /* O: Generated error messages */ |
| 関数: | _FTPX_FTPRenFile |
| 説明: | リモート FTP サーバー上のファイルの名前を変更する関数。 |
| 戻り値: | SDD_FAIL - 指定されたファイルの名前変更に失敗しました。 SDD_OK - ファイルの名前が正常に変更されました。 |
| プロトタイプ: | int _FTPX_FTPRenFile( UCHAR *szPath /* I: Path to remote file */, UCHAR *szSrcFile /* I: Original remote file name */, UCHAR *szDstFile /* I: New remote file name */, UCHAR *szErrMsg ) /* O: Generated error messages */ |
| 関数: | _FTPX_FTPRcvFile |
| 説明: | FTP サーバーから現在のマシンのファイルシステムへのファイル転送を開始する関数。 |
| 戻り値: | SDD_FAIL - ファイル転送を完了できませんでした。 SDD_OK - ファイルが正常に受信されました。 |
| プロトタイプ: | int _FTPX_FTPRcvFile( UCHAR *szRcvFile /* I: Name of file to store in */, UCHAR *szPath /* I: Path to remote file */, UCHAR *szFile /* I: Remote file */, UINT nBinaryMode /* I: Select binary transfer mode */, UCHAR *szErrMsg ) /* O: Generated error messages */ |
| 関数: | _FTPX_FTPXmitFile |
| 説明: | 現在のマシンのファイルシステムから FTP サーバーへのファイル転送を開始する関数。 |
| 戻り値: | SDD_FAIL - ファイル転送を完了できませんでした。 SDD_OK - ファイルが正常に送信されました。 |
| プロトタイプ: | int _FTPX_FTPXmitFile( UCHAR *szXmitFile /* I: Name of file to transmit */, UCHAR *szPath /* I: Path to remote destination */, UCHAR *szFile /* I: Remote file */, UINT nBinaryMode /* I: Select binary transfer Mode */, UCHAR *szErrMsg ) /* O: Generated error messages */ |
| 関数: | ftpx_InitService |
| 説明: | ドライバーを定義済みの状態に初期化するエントリーポイント。ドライバーが正しく機能するために、他のすべての関数の前にこの関数を呼び出すことが必須です。呼び出し元は 2 種類のデータを提供します。1) 自己初期化に使用するデータを含む構造体、2) 初期化を完了できない場合にドライバーがエラーメッセージを格納するバッファへのポインター。 |
| 戻り値: | SDD_FAIL- ドライバーの初期化中にエラーが発生し、szErrStr にエラーメッセージが格納されています。 SDD_OK - ドライバーが正常に初期化されました。 |
| プロトタイプ: | int ftpx_InitService( SERVICEDETAILS *sServiceDet /* I: Init data */, UCHAR *szErrStr ) /* O: Error message */ |
| 関数: | ftpx_CloseService |
| 説明: | ドライバーのクローズダウンを実行するエントリーポイント。クローズダウン手順により、ドライバーは初期状態(電源投入時のような状態)に戻り、InitService を再度呼び出すことができます。 |
| 戻り値: | SDD_FAIL- ドライバーのクローズ中にエラーが発生し、szErrStr にエラーメッセージが格納されています。 SDD_OK - ドライバーが正常にクローズされました。 |
| プロトタイプ: | int ftpx_CloseService( UCHAR *szErrMsg ) /* O: Error message if failed */ |
| 関数: | ftpx_ProcessRequest |
| 説明: | ドライバーにリクエストの処理を開始させるためのドライバーへのエントリーポイント。リクエストと関連パラメーターを表すデータブロックがパラメーターとしてドライバーに渡されます。構造体内のデータは元のクライアントとこのドライバーコードにのみ関連します。 |
| 戻り値: | SDD_FAIL- リクエストの処理中にドライバー内でエラーが発生しました。エラーテキストを参照してください。 SDD_OK - リクエストが正常に処理されました。 |
| プロトタイプ: | int ftpx_ProcessRequest( UCHAR *snzDataBuf /* I: Input data */, int nDataLen /* I: Len of data */, int (*fSendDataCB)(UCHAR *, UINT) /* I: CB to send reply*/, UCHAR *szErrMsg ) /* O: Error text */ |
| 関数: | ftpx_ProcessOOB |
| 説明: | 現在の動作状態に関連する可能性のある帯域外コマンドを処理するためのドライバーへのエントリーポイント。この関数の役割はコマンドを解読して即座に対応することです。例えば、キャンセルコマンドは処理中の ProcessRequest を中断してクリーンアップします。 |
| 戻り値: | 戻り値なし。 |
| プロトタイプ: | void ftpx_ProcessOOB( UCHAR nCommand ) /* I: OOB Command */ |
Java ドライバー sdd_java
| 関数: | java_InitService |
| 説明: | ドライバーを定義済みの状態に初期化するエントリーポイント。ドライバーが正しく機能するために、他のすべての関数の前にこの関数を呼び出すことが必須です。呼び出し元は 2 種類のデータを提供します。1) 自己初期化に使用するデータを含む構造体、2) 初期化を完了できない場合にドライバーがエラーメッセージを格納するバッファへのポインター。 |
| 戻り値: | SDD_FAIL- ドライバーの初期化中にエラーが発生し、szErrStr にエラーメッセージが格納されています。 SDD_OK - ドライバーが正常に初期化されました。 |
| プロトタイプ: | int java_InitService( SERVICEDETAILS *sServiceDet /* I: Init data */, UCHAR *szErrStr ) /* O: Error message */ |
| 関数: | java_CloseService |
| 説明: | ドライバーのクローズダウンを実行するエントリーポイント。クローズダウン手順により、ドライバーは初期状態(電源投入時のような状態)に戻り、InitService を再度呼び出すことができます。 |
| 戻り値: | SDD_FAIL- ドライバーのクローズ中にエラーが発生し、szErrStr にエラーメッセージが格納されています。 SDD_OK - ドライバーが正常にクローズされました。 |
| プロトタイプ: | int java_CloseService( UCHAR *szErrMsg ) /* O: Error message if failed */ |
| 関数: | java_ProcessRequest |
| 説明: | ドライバーにリクエストの処理を開始させるためのドライバーへのエントリーポイント。リクエストと関連パラメーターを表すデータブロックがパラメーターとしてドライバーに渡されます。構造体内のデータは元のクライアントとこのドライバーコードにのみ関連します。 |
| 戻り値: | SDD_FAIL- リクエストの処理中にドライバー内でエラーが発生しました。エラーテキストを参照してください。 SDD_OK - リクエストが正常に処理されました。 |
| プロトタイプ: | int java_ProcessRequest( UCHAR *snzDataBuf /* I: Input data */, int nDataLen /* I: Len of data */, int (*fSendDataCB)(UCHAR *, UINT) /* I: CB to send reply*/, UCHAR *szErrMsg ) /* O: Error text */ |
| 関数: | java_ProcessOOB |
| 説明: | 現在の動作状態に関連する可能性のある帯域外コマンドを処理するためのドライバーへのエントリーポイント。この関数の役割はコマンドを解読して即座に対応することです。例えば、キャンセルコマンドは処理中の ProcessRequest を中断してクリーンアップします。 |
| 戻り値: | 戻り値なし。 |
| プロトタイプ: | void java_ProcessOOB( UCHAR nCommand ) /* I: OOB Command */ |
ODBC ドライバー sdd_odbc
| 関数: | _ODBC_GetArg |
| 説明: | 入力バッファをスキャンして、必要な引数を抽出する関数。 |
| 戻り値: | SDD_FAIL- 引数を取得できませんでした。 SDD_OK - 引数を取得して検証しました。 |
| プロトタイプ: | int _ODBC_GetArg( UCHAR *szArgType /* I: Type of Arg to scan for */, UCHAR *snzDataBuf /* I: Input buffer */, int nDataLen /* I: Len of data */, UCHAR **pszArg ) /* O: Pointer to Arg */ |
| 関数: | _ODBC_LogODBCError |
| 説明: | ODBC ドライバーからのエラーメッセージやエラーコードをログデバイスに出力する関数。主にデバッグ用途に使用します。 |
| 戻り値: | 戻り値なし。 |
| プロトタイプ: | void _ODBC_LogODBCError( HSTMT hStmt ) |
| 関数: | _ODBC_RunSql |
| 説明: | 現在のデータベース上で指定された SQL バッファを実行し、結果データを元の呼び出し元に返す関数。 |
| 戻り値: | SDD_FAIL- SQL の実行に失敗しました。エラーメッセージを参照してください。 SDD_OK - SQL が正常に実行されました。 |
| プロトタイプ: | int _ODBC_RunSql( UCHAR *snzDataBuf /* I: Input data */, int nDataLen /* I: Len of data */, int (*fSendDataCB)(UCHAR *, UINT) /* I: CB to send reply */, UCHAR *szErrMsg ) /* O: Error text */ |
| 関数: | _ODBC_ListDB |
| 説明: | 現在開いているデータソースで使用可能なすべてのデータベース名を一覧表示する関数。 |
| 戻り値: | SDD_FAIL- SQL の実行に失敗しました。エラーメッセージを参照してください。 SDD_OK - SQL が正常に実行されました。 |
| プロトタイプ: | int _ODBC_ListDB( int (*fSendDataCB)(UCHAR *, UINT) /* I: CB to send reply */, UCHAR *szErrMsg ) /* O: Error text */ |
| 関数: | _ODBC_ListTables |
| 説明: | 指定されたデータベース(またはデータベース名が指定されていない場合は現在のデータベース)内のすべてのテーブル名を一覧表示する関数。 |
| 戻り値: | SDD_FAIL- SQL の実行に失敗しました。エラーメッセージを参照してください。 SDD_OK - SQL が正常に実行されました。 |
| プロトタイプ: | int _ODBC_ListTables( UCHAR *snzDataBuf /* I: Input data */, int nDataLen /* I: Len of data */, int (*fSendDataCB)(UCHAR *, UINT) /* I: CB to send reply */, UCHAR *szErrMsg ) /* O: Error text */ |
| 関数: | _ODBC_ListCols |
| 説明: | 指定されたデータベース内の指定されたテーブル(またはデータベース名が指定されていない場合は現在のデータベース/テーブル)のすべての列名と属性を一覧表示する関数。 |
| 戻り値: | SDD_FAIL- SQL の実行に失敗しました。エラーメッセージを参照してください。 SDD_OK - SQL が正常に実行されました。 |
| プロトタイプ: | int _ODBC_ListCols( UCHAR *snzDataBuf /* I: Input data */, int nDataLen /* I: Len of data */, int (*fSendDataCB)(UCHAR *, UINT) /* I: CB to send reply */, UCHAR *szErrMsg ) /* O: Error text */ |
| 関数: | odbc_InitService |
| 説明: | ドライバーを定義済みの状態に初期化するエントリーポイント。ドライバーが正しく機能するために、他のすべての関数の前にこの関数を呼び出すことが必須です。呼び出し元は 2 種類のデータを提供します。1) 自己初期化に使用するデータを含む構造体、2) 初期化を完了できない場合にドライバーがエラーメッセージを格納するバッファへのポインター。 |
| 戻り値: | SDD_FAIL- ドライバーの初期化中にエラーが発生し、szErrMsg にエラーメッセージが格納されています。 SDD_OK - ドライバーが正常に初期化されました。 |
| プロトタイプ: | int odbc_InitService( SERVICEDETAILS *sServiceDet /* I: Init data */, UCHAR *szErrMsg ) /* O: Error message */ |
| 関数: | odbc_CloseService |
| 説明: | ドライバーのクローズダウンを実行するエントリーポイント。クローズダウン手順により、ドライバーは初期状態(電源投入時のような状態)に戻り、InitService を再度呼び出すことができます。 |
| 戻り値: | SDD_FAIL- ドライバーのクローズ中にエラーが発生し、szErrMsg にエラーメッセージが格納されています。 SDD_OK - ドライバーが正常にクローズされました。 |
| プロトタイプ: | int odbc_CloseService( UCHAR *szErrMsg ) /* O: Error message if failed */ |
| 関数: | odbc_ProcessRequest |
| 説明: | ドライバーにリクエストの処理を開始させるためのドライバーへのエントリーポイント。リクエストと関連パラメーターを表すデータブロックがパラメーターとしてドライバーに渡されます。構造体内のデータは元のクライアントとこのドライバーコードにのみ関連します。 |
| 戻り値: | SDD_FAIL- リクエストの処理中にドライバー内でエラーが発生しました。エラーテキストを参照してください。 SDD_OK - リクエストが正常に処理されました。 |
| プロトタイプ: | int odbc_ProcessRequest( UCHAR *snzDataBuf /* I: Input data */, int nDataLen /* I: Len of data */, int (*fSendDataCB)(UCHAR *, UINT) /* I: CB to send reply*/, UCHAR *szErrMsg ) /* O: Error text */ |
| | |
| ———- | —————————————————————————– |
|関数: |odbc_ProcessOOB|
|説明: |現在の動作状態に関連する可能性のある帯域外コマンドを処理するためのドライバーへのエントリーポイント。この関数の役割はコマンドを解読して即座に対応することです。例えば、キャンセルコマンドは処理中の ProcessRequest を中断してクリーンアップします。 |
|戻り値: |戻り値なし。 |
|プロトタイプ: |void odbc_ProcessOOB( UCHAR nCommand ) /* I: OOB Command */ |
SCMD ドライバー sdd_scmd
| 関数: | _SCMD_GetStrArg |
| 説明: | 入力バッファをスキャンして、文字列ベースの引数を抽出する関数。 |
| 戻り値: | SDD_FAIL- 引数を取得できませんでした。 SDD_OK - 引数を取得しました。 |
| プロトタイプ: | int _SCMD_GetStrArg( UCHAR *snzDataBuf /* I: Input buffer */, int nDataLen /* I: Len of data */, UCHAR *szArg /* I: Arg to look for */, UCHAR **pszPath ) /* O: Pointer to argument */ |
| 関数: | _SCMD_ValidatePath |
| 説明: | パスの存在を検証する関数。 |
| 戻り値: | SDD_FAIL- PATH を検証できませんでした。 SDD_OK - PATH を検証しました。 |
| プロトタイプ: | int _SCMD_ValidatePath( UCHAR *pszPath ) /* I: Path to validate */ |
| 関数: | _SCMD_ValidateFile |
| 説明: | ファイルの存在を検証する、またはファイルが作成可能であることを検証する関数。 |
| 戻り値: | SDD_FAIL- ファイル名を取得または検証できませんでした。 SDD_OK - ファイル名を取得して検証しました。 |
| プロトタイプ: | int _SCMD_ValidateFile( UCHAR *pszPath /* I: Path to file */, UCHAR *pszFile /* I: File to validate */, UINT nWriteFlag ) /* I: Read = 0, Write = 1 */ |
| 関数: | _SCMD_ValidateTime |
| 説明: | ASCII 文字列として与えられた時刻値を検証する関数。 |
| 戻り値: | SDD_FAIL- TIME を取得または検証できませんでした。 SDD_OK - TIME を取得して検証しました。 |
| プロトタイプ: | int _SCMD_ValidateTime( UCHAR *pszTime /* I: Time to verify */, ULNG *lTime ) /* O: Time in seconds */ |
| 関数: | _SCMD_Exec |
| 説明: | fork と exec を使って指定されたコマンドを実行し、親プロセスを子プロセスの I/O にアタッチすることで、子プロセスが出力するデータを親プロセスが取得して呼び出し元にフィードバックできるようにする関数。 |
| 戻り値: | SDD_FAIL- 実行中にコマンドが失敗しました。 SDD_OK - コマンドが正常に実行されました。 |
| プロトタイプ: | int _SCMD_Exec( int nTimedExec /* I: Is this a timed exec (T/F)? */, UCHAR *pszPath /* I: Path to command */, UCHAR *pszCmd /* I: Command name */, UCHAR *pszArgs /* I: Arguments to command */, ULNG lTimeToExec /* I: Time to execution */, int (*fSendDataCB)(UCHAR *, UINT) /* I: Func for returning data */, UCHAR *szErrMsg ) /* O: Error message generated */ |
| 関数: | _SCMD_GetWriteData |
| 説明: | 入力バッファをスキャンし、データが含まれているか検証して、データを抽出してオープンしたファイルストリームに格納し、そのブロックが最終ブロックであれば開始フラグを設定する関数。 |
| 戻り値: | SDD_FAIL- 不正なデータブロックまたはファイルへの書き込みエラー。 SDD_OK - ブロックを取得して格納しました。 |
| プロトタイプ: | int _SCMD_GetWriteData( UCHAR *snzDataBuf /* I: Input buffer */, int nDataLen /* I: Len of data */, FILE *fpFile /* IO: Opened file stream */, int *nLast /* O: Last block flag */, UCHAR *szErrMsg ) /* O: Any resultant error msg */ |
| 関数: | _SCMD_PutReadData |
| 説明: | オープンしたストリームを読み取り、コールバックメカニズムを介してデータの内容を呼び出し元に送信する関数。 |
| 戻り値: | SDD_FAIL- PATH を取得できませんでした。 SDD_OK - PATH を取得しました。 |
| プロトタイプ: | int _SCMD_PutReadData( FILE *fpFile /* I: Stream to read from */, int (*fSendDataCB)(UCHAR *, UINT) /* I: CB to send data to */, UCHAR *szErrMsg ) /* O: Error text */ |
| 関数: | _SCMD_MoveFile |
| 説明: | ファイルをある場所/名前から別の場所/名前に移動する関数。基盤となるシステムがファイルシステムをまたぐ移動をサポートしていない場合があるため、コピーとアンリンクの操作として実行されます。 |
| 戻り値: | SDD_FAIL- ファイルの移動中にエラーが発生しました。szErrMsg を参照してください。 SDD_OK - ファイルが正常に移動されました。 |
| プロトタイプ: | int _SCMD_MoveFile( UCHAR *pszSrcPath /* I: Path to source file */, UCHAR *pszSrcFile /* I: Source File */, UCHAR *pszDstPath /* I: Path to dest file */, UCHAR *pszDstFile /* I: Dest File */, UCHAR *szErrMsg ) /* O: Error message */ |
| 関数: | _SCMD_DeleteFile |
| 説明: | 指定されたパスからファイルを削除する関数。 |
| 戻り値: | SDD_FAIL- ファイルの移動中にエラーが発生しました。szErrMsg を参照してください。 SDD_OK - ファイルが正常に移動されました。 |
| プロトタイプ: | int _SCMD_DeleteFile( UCHAR *pszDelPath /* I: Path to file */, UCHAR *pszDelFile /* I: File to delete */, UCHAR *szErrMsg ) /* O: Error message */ |
| 関数: | scmd_InitService |
| 説明: | ドライバーを定義済みの状態に初期化するエントリーポイント。ドライバーが正しく機能するために、他のすべての関数の前にこの関数を呼び出すことが必須です。呼び出し元は 2 種類のデータを提供します。1) 自己初期化に使用するデータを含む構造体、2) 初期化を完了できない場合にドライバーがエラーメッセージを格納するバッファへのポインター。 |
| 戻り値: | SDD_FAIL- ドライバーの初期化中にエラーが発生し、szErrStr にエラーメッセージが格納されています。 SDD_OK - ドライバーが正常に初期化されました。 |
| プロトタイプ: | int scmd_InitService( SERVICEDETAILS *sServiceDet /* I: Init data */, UCHAR *szErrStr ) /* O: Error message */ |
| 関数: | scmd_CloseService |
| 説明: | ドライバーのクローズダウンを実行するエントリーポイント。クローズダウン手順により、ドライバーは初期状態(電源投入時のような状態)に戻り、InitService を再度呼び出すことができます。 |
| 戻り値: | SDD_FAIL- ドライバーのクローズ中にエラーが発生し、szErrStr にエラーメッセージが格納されています。 SDD_OK - ドライバーが正常にクローズされました。 |
| プロトタイプ: | int scmd_CloseService( UCHAR *szErrMsg ) /* O: Error message if failed */ |
| 関数: | scmd_ProcessRequest |
| 説明: | ドライバーにリクエストの処理を開始させるためのドライバーへのエントリーポイント。リクエストと関連パラメーターを表すデータブロックがパラメーターとしてドライバーに渡されます。構造体内のデータは元のクライアントとこのドライバーコードにのみ関連します。 |
| 戻り値: | SDD_FAIL- リクエストの処理中にドライバー内でエラーが発生しました。エラーテキストを参照してください。 SDD_OK - リクエストが正常に処理されました。 |
| プロトタイプ: | int scmd_ProcessRequest( UCHAR *snzDataBuf /* I: Input data */, int nDataLen /* I: Len of data */, int (*fSendDataCB)(UCHAR *, UINT) /* I: CB to send reply*/, UCHAR *szErrMsg ) /* O: Error text */ |
| 関数: | scmd_ProcessOOB |
| 説明: | 現在の動作状態に関連する可能性のある帯域外コマンドを処理するためのドライバーへのエントリーポイント。この関数の役割はコマンドを解読して即座に対応することです。例えば、キャンセルコマンドは処理中の ProcessRequest を中断してクリーンアップします。 |
| 戻り値: | 戻り値なし。 |
| プロトタイプ: | void scmd_ProcessOOB( UCHAR nCommand ) /* I: OOB Command */ |
Sybase ドライバー sdd_sybc
| 関数: | _SYBC_GetArg |
| 説明: | 入力バッファをスキャンして、必要な引数を抽出する関数。 |
| 戻り値: | SDD_FAIL- 引数を取得できませんでした。 SDD_OK - 引数を取得して検証しました。 |
| プロトタイプ: | int _SYBC_GetArg( UCHAR *szArgType /* I: Type of Arg to scan for */, UCHAR *snzDataBuf /* I: Input buffer */, int nDataLen /* I: Len of data */, UCHAR **pszArg ) /* O: Pointer to Arg */ |
| 関数: | _SYBC_RunSql |
| 説明: | 現在のデータベース上で指定された SQL バッファを実行し、結果データを元の呼び出し元に返す関数。 |
| 戻り値: | SDD_FAIL- SQL の実行に失敗しました。エラーメッセージを参照してください。 SDD_OK - SQL が正常に実行されました。 |
| プロトタイプ: | int _SYBC_RunSql( UCHAR *snzDataBuf /* I: Input data */, int nDataLen /* I: Len of data */, int (*fSendDataCB)(UCHAR *, UINT) /* I: CB to send reply */, UCHAR *szErrMsg ) /* O: Error text */ |
| 関数: | sybc_InitService |
| 説明: | ドライバーを定義済みの状態に初期化するエントリーポイント。ドライバーが正しく機能するために、他のすべての関数の前にこの関数を呼び出すことが必須です。呼び出し元は 2 種類のデータを提供します。1) 自己初期化に使用するデータを含む構造体、2) 初期化を完了できない場合にドライバーがエラーメッセージを格納するバッファへのポインター。 |
| 戻り値: | SDD_FAIL- ドライバーの初期化中にエラーが発生し、szErrStr にエラーメッセージが格納されています。 SDD_OK - ドライバーが正常に初期化されました。 |
| プロトタイプ: | int sybc_InitService( SERVICEDETAILS *sServiceDet /* I: Init data */, UCHAR *szErrStr ) /* O: Error message */ |
| 関数: | _SYBC_ListDB |
| 説明: | 現在開いているデータソースで使用可能なすべてのデータベース名を一覧表示する関数。 |
| 戻り値: | SDD_FAIL- SQL の実行に失敗しました。エラーメッセージを参照してください。 SDD_OK - SQL が正常に実行されました。 |
| プロトタイプ: | int _SYBC_ListDB( int (*fSendDataCB)(UCHAR *, UINT) /* I: CB to send reply */, UCHAR *szErrMsg ) /* O: Error text */ |
| 関数: | _SYBC_ListTables |
| 説明: | 指定されたデータベース(またはデータベース名が指定されていない場合は現在のデータベース)内のすべてのテーブル名を一覧表示する関数。 |
| 戻り値: | SDD_FAIL- SQL の実行に失敗しました。エラーメッセージを参照してください。 SDD_OK - SQL が正常に実行されました。 |
| プロトタイプ: | int _SYBC_ListTables( UCHAR *snzDataBuf /* I: Input data */, int nDataLen /* I: Len of data */, int (*fSendDataCB)(UCHAR *, UINT) /* I: CB to send reply */, UCHAR *szErrMsg ) /* O: Error text */ |
| 関数: | _SYBC_ListCols |
| 説明: | 指定されたデータベース内の指定されたテーブル(またはデータベース名が指定されていない場合は現在のデータベース/テーブル)のすべての列名と属性を一覧表示する関数。 |
| 戻り値: | SDD_FAIL- SQL の実行に失敗しました。エラーメッセージを参照してください。 SDD_OK - SQL が正常に実行されました。 |
| プロトタイプ: | int _SYBC_ListCols( UCHAR *snzDataBuf /* I: Input data */, int nDataLen /* I: Len of data */, int (*fSendDataCB)(UCHAR *, UINT) /* I: CB to send reply */, UCHAR *szErrMsg ) /* O: Error text */ |
| 関数: | sybc_CloseService |
| 説明: | ドライバーのクローズダウンを実行するエントリーポイント。クローズダウン手順により、ドライバーは初期状態(電源投入時のような状態)に戻り、InitService を再度呼び出すことができます。 |
| 戻り値: | SDD_FAIL- ドライバーのクローズ中にエラーが発生し、szErrStr にエラーメッセージが格納されています。 SDD_OK - ドライバーが正常にクローズされました。 |
| プロトタイプ: | `int sybc_CloseService( UCHAR szErrMsg ) / O: Error message if failed */ |
| 関数: | sybc_ProcessRequest |
| 説明: | ドライバーにリクエストの処理を開始させるためのドライバーへのエントリーポイント。リクエストと関連パラメーターを表すデータブロックがパラメーターとしてドライバーに渡されます。構造体内のデータは元のクライアントとこのドライバーコードにのみ関連します。 |
| 戻り値: | SDD_FAIL- リクエストの処理中にドライバー内でエラーが発生しました。エラーテキストを参照してください。 SDD_OK - リクエストが正常に処理されました。 |
| プロトタイプ: | int sybc_ProcessRequest( UCHAR *snzDataBuf /* I: Input data */, int nDataLen /* I: Len of data */, int (*fSendDataCB)(UCHAR *, UINT) /* I: CB to send reply */, UCHAR *szErrMsg ) /* O: Error text */ |
| 関数: | sybc_ProcessOOB |
| 説明: | 現在の動作状態に関連する可能性のある帯域外コマンドを処理するためのドライバーへのエントリーポイント。この関数の役割はコマンドを解読して即座に対応することです。例えば、キャンセルコマンドは処理中の ProcessRequest を中断してクリーンアップします。 |
| 戻り値: | 戻り値なし。 |
| プロトタイプ: | void sybc_ProcessOOB( UCHAR nCommand ) /* I: OOB Command */ |
VDW ライブラリ
仮想データウェアハウスライブラリ(VDW)は、仮想データウェアハウスを構築するための API セットです。これらのメソッドは通常、データソースを持つサーバーに配置されるクロスプラットフォーム(Linux、SunOS、Solaris、Windows)デーモンのセットを構築するために使用されます。デーモンは SDD ドライバーのセットを内蔵し、必要なデータソースをオープンしてアプリケーションや MDC 層と通信しながら適切にサービスを提供します。 例えば、ネットワーク A 上の SQL Server、ネットワーク B 上の Sybase Server、ネットワーク C 上の FTP ソースに対して、それぞれのサーバーに VDW デーモンを配置してデータソースとの接続を開きます。ルーティングを介して、ネットワーク D 上の MDC アプリケーションがすべてのソースを必要に応じてクエリできるようになります。 現時点では VDW ライブラリが ZPU Evo で役立つ用途は見当たりませんが、分散した非中央集権型データソースのネットワークを構築しようとしている場合には有用かもしれません。
VDW ライブラリのメソッドは以下の通りです。メソッド名が「_」で始まる場合は内部メソッドであり、通常は直接呼び出しません。ただし C 言語の性質上、メソッドやデータに対するプライベート定義は存在しないため、必要であれば呼び出すことも可能です。
| 関数: | GetConfig |
| 説明: | OS またはコマンドラインフラグから設定情報を取得します。 |
| 戻り値: | VDWD_OK - 設定を取得しました。 VDWD_FAIL - 失敗しました。エラーメッセージを参照してください。 |
| プロトタイプ: | int GetConfig( int argc /* I: CLI argument count */. UCHAR **argv /* I: CLI argument contents */, char **envp /* I: Environment variables */, UCHAR *szErrMsg ) /* O: Any generated error message */ |
| 関数: | VDWDInit |
| 説明: | 変数、機能、通信の初期化、およびプロセスのデーモン化を行います。 |
| 戻り値: | VDWD_OK - 正常に初期化されました。 VDWD_FAIL - 失敗しました。エラーメッセージを参照してください。 |
| プロトタイプ: | int VDWDInit( UCHAR *szErrMsg ) /* O: Generated error message */ |
| 関数: | VDWDClose |
| 説明: | モジュール内で使用されたすべてのリソースのクローズ処理を実行する関数。 |
| 戻り値: | VDWD_OK - 正常にクローズされました。 VDWD_FAIL - 失敗しました。エラーメッセージを参照してください。 |
| プロトタイプ: | int VDWDClose( UCHAR *szErrMsg ) /* O: Generated error message */ |
| 関数: | VDWDSentToClient |
| 説明: | このデーモンから関連するクライアントにデータを送信する関数。 |
| 戻り値: | SDD_OK - データが正常に送信されました。 SDD_FAIL - データの送信に失敗しました。 |
| プロトタイプ: | int VDWDSendToClient( UCHAR *snzData /* I: Data to send */, UINT nDataLen ) /* I: Length of data */ |
| 関数: | VDWDInitService |
| 説明: | 指定されたドライバーの初期化関数を呼び出す関数。 |
| 戻り値: | VDWD_OK - サービスが正常に初期化されました。 VDWD_FAIL - 失敗しました。エラーメッセージを参照してください。 |
| プロトタイプ: | int VDWDInitService( int nServiceType /* I: Type of service*/, SERVICEDETAILS *sServiceDet /* I: Service Data */, UCHAR *szErrMsg ) /* O: Error message */ |
| 関数: | VDWDCloseService |
| 説明: | 指定されたドライバーのクローズダウン関数を呼び出す関数。 |
| 戻り値: | VDWD_OK - サービスが正常にクローズされました。 VDWD_FAIL - 失敗しました。エラーメッセージを参照してください。 |
| プロトタイプ: | int VDWDCloseService( int nServiceType /* I: Type of service*/, UCHAR *szErrMsg ) /* O: Error message */ |
| 関数: | VDWDProcessRequest |
| 説明: | 指定されたドライバーのサービスリクエスト処理関数を呼び出す関数。 |
| 戻り値: | VDWD_OK - リクエストが正常に処理されました。 VDWD_FAIL - 失敗しました。エラーメッセージを参照してください。 |
| プロトタイプ: | int VDWDProcessRequest( int nServiceType /* I: Type of service */, UCHAR *snzData /* I: Data Buffer */, UINT nDataLen /* I: Len of Data */, UCHAR *szErrMsg ) /* O: Error message */ |
| 関数: | VDWDDataCallback |
| 説明: | コールバックとして登録される関数で、新しいクライアントからデータが届くたびに呼び出されます。 |
| 戻り値: | MDC_OK - 正常にクローズされました。 MDC_FAIL - 失敗しました。エラーメッセージを参照してください。 |
| プロトタイプ: | int VDWDDataCallback( UCHAR *snzData /* I: Buffer containing data */, int nDataLen /* I: Length of data in buffer */, UCHAR *szErrMsg ) /* O: Error messages generated */ |
| 関数: | VDWDOOBCallback |
| 説明: | MDC 層からの帯域外コマンドに対してアクションを取る関数。帯域外メッセージは一般的に即座に対応する必要があるコマンドであるため、ドライバーの帯域外処理関数に渡されます。 |
| 戻り値: | 戻り値なし。 |
| プロトタイプ: | void VDWDOOBCallback( UCHAR cCmd ) /* I: Command to action upon */ |
MDC ライブラリ
メタデータコミュニケーション API(MDC)は、仮想データウェアハウス設計の一部として開発されたもので、異種システムおよびデータソース(Sybase、SQL Server、FTP CSV、フラットファイルなど)をカプセル化し、MDC API を通じてこれらを一元的かつ均一な方法でクエリできるようにすることを目的としていました。アプリケーションはデータソースに関係なく正規化されたリクエストを MDC 層に対して発行し、MDC が適切なソースへのターゲティングと必要な変換処理を担います。 現時点では ZPU Evo での用途は見当たりませんが、VDW デーモンを使用して異種データソースを結合しようとしている場合には有用かもしれません。
MDC ライブラリのメソッドは、それぞれが属する機能ごとに分類して以下に説明します。メソッド名が「_」で始まる場合は内部メソッドであり、通常は直接呼び出しません。ただし C 言語の性質上、メソッドやデータに対するプライベート定義は存在しないため、必要であれば呼び出すことも可能です。
MDC サーバー API
| 関数: | _MDC_SendACK |
| 説明: | データブロックを正常に受信した場合またはリクエストが正常に処理された場合に、クライアントに確認応答を送信する関数。 |
| 戻り値: | MDC_FAIL- ACK メッセージをクライアントに送信できませんでした。 MDC_OK - ACK が正常に送信されました。 |
| プロトタイプ: | int _MDC_SendACK( void ) |
| 関数: | _MDC_SendNAK |
| 説明: | 不正なデータブロックが届いた場合またはリクエストを正常に処理できなかった場合に、クライアントに否定応答を送信する関数。 |
| 戻り値: | MDC_FAIL- NAK メッセージをクライアントに送信できませんでした。 MDC_OK - NAK が正常に送信されました。 |
| プロトタイプ: | int _MDC_SendNAK( UCHAR szErrMsg /* I: Error msg to send with NAK */ ) |
| 関数: | _MDC_ServerCntlCB |
| 説明: | MDC_Server の実行結果として生成される通信制御コールバックを処理する関数。 |
| 戻り値: | 戻り値なし。 |
| プロトタイプ: | void _MDC_ServerCntlCB( int nType /* I: Type of callback */, ... /* I: Arg list according to type */ ) |
| 関数: | _MDC_ServerDataCB |
| 説明: | MDC_Server の実行中にデータが到着した際に生成されるデータコールバックを処理する関数。 |
| 戻り値: | 戻り値なし。 |
| プロトタイプ: | void _MDC_ServerDataCB( UINT nChanId / I: Channel data rcv on */, UCHAR szData /* I: Rcvd data */, UINT nDataLen /* I: Rcvd data length */) |
| 関数: | MDC_Server |
| 説明: | サーバープロセスとしてメタデータコミュニケーションへのエントリーポイント。この関数はすべての通信等を初期化した後、指定されたユーザーコールバックを実行して必要なアクションを行います。 |
| 戻り値: | MDC_FAIL- 重大なエラーにより関数が終了しました。正確な理由コードは Errno を参照してください。 MDC_OK - 関数がエラーなく正常に完了しました。 |
| プロトタイプ: | int MDC_Server( UINT nPortNo /* I: TCP/IP port number */, UCHAR szService /* I: Name of TCP/IP Service */, int (fLinkDataCB) /* I: User function callback */, (UCHAR , int, UCHAR ), void (fControlCB)(UCHAR) /* I: User control callback */ ) |
| 関数: | MDC_ReturnData |
| 説明: | 接続されたクライアントに任意のデータを返すためにユーザーコードから呼び出される関数。この関数は、データを提供した「MDC 層からユーザーコードへの」コールバックに応答してのみ呼び出すことができます。 |
| 戻り値: | MDC_FAIL- 指定されたデータブロックをクライアントプロセスに送信中にエラーが発生しました。正確な理由コードは Errno を参照してください。 MDC_OK - データパケットが正常に送信されました。 |
| プロトタイプ: | int MDC_ReturnData( UCHAR snzDataBuf /* I: Data to return */, int nDataLen /* I: Length of data */ ) |
| 関数: | MDC_TimerCB |
| 説明: | タイマーの満了時に起動されるコールバックイベントをユーザーコードが登録できるようにする関数。ユーザーは頻度とコールバック関数を提供し、MDC がスケジューリングを行います。 |
| 戻り値: | 戻り値なし。 |
| プロトタイプ: | int MDC_TimerCB( ULNG lTimePeriod /* I: CB Time in Millseconds */, UINT nEnable /* I: Enable(TRUE)/Dis(FALSE) CB */, UINT nAstable /* I: Astable(TRUE) or Mono CB */, void (fTimerCB)(void) /* I: Function to call back */ ) |
MDC クライアント API
| 関数: | _MDC_DataCB |
| 説明: | いずれかのサービス接続でデータが受信された際にコールバックされる関数。 |
| 戻り値: | void |
| プロトタイプ: | `void _MDC_DataCB(UINT nChanId, UCHAR *szData, UINT nDataLen) |
| 関数: | _MDC_CtrlCB |
| 説明: | いずれかのサービス接続で制御情報が受信された際にコールバックされる関数。 |
| 戻り値: | void |
| プロトタイプ: | `void _MDC_CtrlCB(int nType, …) |
| 関数: | _MDC_SendPacket |
| 説明: | デーモンにパケットを送信する関数。 |
| 戻り値: | MDC_OK または MDC_FAIL |
| プロトタイプ: | `int _MDC_SendPacket(UINT nChanId, char cPacketType, UCHAR *psnzBuf, UINT nBuflen) |
| 関数: | _MDC_GetSrvRqtReply |
| 説明: | サービスリクエストパケットへの返信を取得する関数。 |
| 戻り値: | MDC_OK または MDC_FAIL |
| プロトタイプ: | `int _MDC_GetSrvRqtReply(UINT nChanId, char *pcPacketType) |
| 関数: | _MDC_CreateChStatus |
| 説明: | 新しいチャネルステータス構造体を作成してリンクリストに追加する関数。 |
| 戻り値: | MDC_OK または MDC_FAIL |
| プロトタイプ: | `int _MDC_CreateChStatus(UINT nChanId) /* Channel ID */ |
| 関数: | _MDC_DelChStatus |
| 説明: | チャネルステータスのリンクリストからアイテムを削除する関数。 |
| 戻り値: | MDC_OK または MDC_FAIL |
| プロトタイプ: | `int _MDC_DelChStatus(UINT nChanId) /* Channel ID */ |
| 関数: | _MDC_SetChState |
| 説明: | チャネルの状態を指定された値に設定する関数。 |
| 戻り値: | MDC_OK または MDC_FAIL |
| プロトタイプ: | `int _MDC_SetChState( UINT nChanId /* Channel ID /, CHSTATE eNewState / New state */ ) |
| 関数: | _MDC_SetSRResult |
| 説明: | チャネルの送信リクエスト結果を設定する関数。 |
| 戻り値: | MDC_OK または MDC_FAIL |
| プロトタイプ: | `int _MDC_SetSRResult( UINT nChanId /* Channel ID /, UINT bResult / Send Request result */) |
| 関数: | _MDC_GetSRResult |
| 説明: | チャネルの送信リクエスト結果を取得する関数。 |
| 戻り値: | MDC_OK または MDC_FAIL |
| プロトタイプ: | `int _MDC_GetSRResult( UINT nChanId /* Channel ID /, UINT *bResult / Send Request result */) |
| 関数: | _MDC_SetUserCB |
| 説明: | 送信リクエストのコールバックを指定された値に設定する関数。 |
| 戻り値: | MDC_OK または MDC_FAIL |
| プロトタイプ: | `int _MDC_SetUserCB( UINT nChanId /* Channel ID /, void (UserCB) (UINT, UCHAR , UINT) / call back */) |
| 関数: | _MDC_GetChState |
| 説明: | 指定されたチャネルのチャネル状態を取得する関数。 |
| 戻り値: | MDC_OK または MDC_FAIL |
| プロトタイプ: | `int _MDC_GetChState( UINT nChanId /* Channel ID /, CHSTATE *eState / Channel state */) |
| 関数: | _MDC_GetNAKErrStr |
| 説明: | NAK エラー文字列へのポインターを取得する関数。 |
| 戻り値: | MDC_OK または MDC_FAIL |
| プロトタイプ: | `int _MDC_GetNAKErrStr( UINT nChanId /* Channel ID /, UCHAR **ppszErrStr / pointer to pointer to error string */) |
| 関数: | _MDC_GetUserCB |
| 説明: | チャネルのユーザーコールバックを取得する関数。 |
| 戻り値: | MDC_OK または MDC_FAIL |
| プロトタイプ: | `int _MDC_GetUserCB( UINT nChanId /* Channel ID /, void (**UserCB) (UINT, UCHAR *, UINT / User call back */) |
| 関数: | _MDC_PrintErrMsg |
| 説明: | エラーメッセージのテキストを出力する関数。 |
| 戻り値: | MDC_OK または MDC_FAIL |
| プロトタイプ: | `int _MDC_PrintErrMsg( UCHAR psnzErrMsg / Error message none terminated /, UINT nBufLen / Buffer Length */) |
| 関数: | _MDC_WaitOnSndReq |
| 説明: | 送信リクエストが完了するまでブロックする関数。 |
| 戻り値: | MDC_OK または MDC_FAIL |
| プロトタイプ: | `int _MDC_WaitOnSndReq(UINT nChanId) /* Channel ID */ |
| 関数: | MDC_SendRequest |
| 説明: | ドライバーにリクエストを送信する関数。 |
| 戻り値: | MDC_OK または MDC_FAIL |
| プロトタイプ: | `int MDC_SendRequest( UINT nChanId /* I: Channel to send message on /, UCHAR *szData / I: Data to send /, UINT nDataLen / I: Length of data /, void (DataCB) (UINT, UCHAR , UINT) / I: call back function for data */ ) |
| 関数: | MDC_GetResult |
| 説明: | 送信リクエストへのすべての返信を待機してから結果を返す関数。 |
| 戻り値: | MDC_OK または MDC_FAIL |
| プロトタイプ: | int MDC_GetResult( UINT nChanId /* I: Channel ID */, UCHAR **ppszErrorMsg /* O: Associated error message */) |
| 関数: | MDC_GetStatus |
| 説明: | 指定されたチャネルの送信リクエストが完了したかどうかを示すブール値を返す関数。 |
| 戻り値: | MDC_OK または MDC_FAIL |
| プロトタイプ: | int MDC_GetStatus( UINT nChanId /* I: Channel ID */, UINT *bSndReqCom /* O: Indicates whether Send Request has completed */ ) |
| 関数: | MDC_CreateService |
| 説明: | サービスリクエストを発行できるようにデーモンへの接続を作成する関数。 |
| 戻り値: | チャネル ID、または負のエラーコード。 |
| プロトタイプ: | int MDC_CreateService( UCHAR *szHostName /* I: Host for connect*/, UINT *nPortNo /* I: Port host on */, SERVICEDETAILS *serviceDet /* I: Service details */ ) |
| 関数: | MDC_SetTimeout |
| 説明: | システムのタイムアウト値の一つをデフォルトからユーザー設定に変更する関数。 |
| 戻り値: | MDC_OK - 設定が変更されました。 MDC_FAIL - 設定を変更できませんでした。エラーメッセージを参照してください。 |
| プロトタイプ: | int MDC_SetTimeout( UCHAR *pszWhichTimeout /* I: Timeout to set */, UINT nTimeoutValue /* I: New value */, UCHAR *pszErrMsg /* O: Error message */ ) |
| 関数: | MDC_CloseService |
| 説明: | サービスチャネルをクローズする関数。 |
| 戻り値: | MDC_FAIL または MDC_OK または MDC_BADCONTEXT |
| プロトタイプ: | int MDC_CloseService( UINT nChanId ) /* I: Channel to close */ |
| 関数: | MDC_Start |
| 説明: | MDC 通信を初期化するために呼び出される関数。 |
| 戻り値: | MDC_FAIL または MDC_OK |
| プロトタイプ: | int MDC_Start( void ) |
| 関数: | MDC_End |
| 説明: | MDC 通信をシャットダウンするために呼び出される関数。 |
| 戻り値: | MDC_FAIL または MDC_OK |
| プロトタイプ: | int MDC_End( void ) |
| 関数: | MDC_ChangeService |
| 説明: | 既存のデーモン接続のサービスを変更する関数。 |
| 戻り値: | MDC_OK、MDC_FAIL、MDC_NODAEMON、MDC_NOSERVICE、MDC_BADPARMS |
| プロトタイプ: | int MDC_ChangeService( UINT nChanId /* I: Chan ID of srvc */, SERVICEDETAILS *serviceDet /* I: Service details */ ) |
MDC 共通 API
| 関数: | _MDC_Init |
| 説明: | MDC の初期化を実行する関数。ライブラリは _MDC_Terminate の前に初期化が一度だけ行われるよう確認チェックを行います。 |
| 戻り値: | MDC_FAIL- ライブラリを初期化できませんでした。 MDC_OK - ライブラリが初期化されました。 |
| プロトタイプ: | int _MDC_Init( void ) |
| 関数: | _MDC_Terminate |
| 説明: | MDC ライブラリをシャットダウンする関数。正常にシャットダウンされた後、_MDC_Init を呼び出してライブラリを再初期化することができます。MDC_Terminate が失敗した場合は、プログラムの終了を推奨します。 |
| 戻り値: | MDC_FAIL- クリーンなシャットダウンを実行できませんでした。 MDC_OK - ライブラリが正常にシャットダウンされました。 |
| プロトタイプ: | int _MDC_Terminate( void ) |
ライセンス
これらのソフトウェアライブラリは GNU Public Licence v3 の下でライセンスされています。
GNU パブリックライセンス v3
このプロジェクト内で GPL v3 とマークされているソースおよびバイナリファイルはフリーソフトウェアです。Free Software Foundation が公開する GNU 一般公衆ライセンスのバージョン 3、またはお望みであればそれ以降のバージョンの条件のもとで、再配布および/または改変することができます。
ソースファイルは有用であることを期待して配布されていますが、いかなる保証も伴いません。市場性または特定目的への適合性に関する暗黙の保証も含め、一切の保証を行いません。詳細については GNU 一般公衆ライセンスをご参照ください。
このプログラムとともに GNU 一般公衆ライセンスのコピーを受け取っているはずです。受け取っていない場合は http://www.gnu.org/licenses/ をご参照ください。