μNet3/CompactのサンプルCGIの詳細動作を教えて下さい

弊社TCP/IPプロトコルスタック「μNet3」に関するご質問
返信する
アバター
eForce技術担当
記事: 193
登録日時: 2014年4月24日(木) 14:18

μNet3/CompactのサンプルCGIの詳細動作を教えて下さい

投稿記事 by eForce技術担当 » 2015年2月27日(金) 15:46

uNet3/Compactに収録しているHTTPサーバのコンテンツはFORMによって次のようなURLクエリパラメータを送信します。

led=10&btn=LED&remote=192.168.1.1&sntp=133.243.238.243&fqdn=eforce.co.jp&dns=192.168.1.1

CGIサンプルではPOSTされるこれらのURLクエリパラメータに対応して次の動作を行います。
  • ・LEDの点滅間隔の設定
    ・pingによる疎通確認
    ・SNTPによる時刻取得
    ・DNSによる名前解決
それぞれの動作が完了するとCGI関数ではHttpSendText()を使ってコンテンツおよび200OKをHTTPクライアント(ブラウザ)に応答します。
またCGIのサンプルでは固定長メモリプールを使ってコンテンツの生成に必要なバッファを動的に確保しています。
以下にcgi_sample.cで実装している各関数の仕様を説明します。

void sample_fnc(T_HTTP_SERVER *http)
CGIの本体関数です。この関数は予めHTTPサーバのコンテンツ設定時に登録されます。
引数httpはこのCGI関数を呼び出したHTTPサーバの管理情報です。
本関数では受信したコンテンツからURLクエリパラメータを取得し、どのボタンが押されたかによって(*)対応する処理関数を呼び出します。
URLクエリパラメータを解析するにはCgiGetParam()関数を使用します。
(*)パラメータ名"btn"に設定された値によって分岐判定します。例えばPINGボタンでsubmitした場合は"&btn=PING"となります。

ER led_blink(T_HTTP_SERVER *http, int cnt, char *name[], char *value[])
LEDの点滅間隔の設定を行うサブ関数です。
引数のURLクエリパラメータ群からパラメータ名"led"の値を取得し、LEDの点滅間隔変数であるLedTmoに設定します。

ER ping_send(T_HTTP_SERVER *http, int cnt, char *name[], char *value[])
pingによる疎通確認を行うサブ関数です。
引数のURLクエリパラメータ群からパラメータ名"remote"の値を取得し、pingを送信する宛先のIPアドレスに設定します。
その後pingクライアントの送信関数(ping_client())を呼び出します。

ER sntp_send(T_HTTP_SERVER *http, int cnt, char *name[], char *value[])
SNTPによる時刻取得を行うサブ関数です。
引数のURLクエリパラメータ群からパラメータ名"sntp"の値を取得し、SNTPサーバのIPアドレスに設定します。
その後SNTPクライアントの時刻取得関数(sntp_client())を呼び出します。

ER dns_resolve(T_HTTP_SERVER *http, int cnt, char *name[], char *value[])
DNSによる名前解決を行うサブ関数です。
引数のURLクエリパラメータ群からパラメータ名"dns"と"fqdn"の値を取得し、DNSサーバのIPアドレスと解決するホスト名に設定します。
その後DNSクライアントの名前解決関数(dns_get_ipaddr())を呼び出します。

ER get_contents_buf(char**buf)
CGI用動的バッファの取得関数です。tget_mpf()を呼び出して固定長メモリプールをカーネルから取得します。
引数にはバッファのアドレスを格納するポインタを指定します。

void ret_contents_buf(char *buf)
CGI用動的バッファの解放関数です。rel_mpf()を呼び出して固定長メモリプールをカーネルへ返却します。
引数には解放するバッファのアドレスを指定します。

返信する