Cente HTTPd/c
ドキュメント修正
本リリースは、ドキュメントの修正のみで、ソースコードの修正はありません。
バージョンアップにおける注意事項(HTTPd/c).pdfにおいて、「変更されたファイル」の漏れ・記述間違いがあったので、全て修正。
HTTPd/c改版履歴(本HTML)のHTTPd ver1.50のHTTPd修正において、「通信エラーが発生した時に次の通信に失敗する事がある不具合を修正」の記述が抜けていたので、追加記述。
ドキュメント修正
本リリースは、ドキュメントの修正のみで、ソースコードの修正はありません。
バージョンアップにおける注意事項(HTTPd/c).pdfにおいて、「変更されたファイル」の漏れ・記述間違いがあったので、全て修正。
HTTPd/c改版履歴(本HTML)のHTTPd ver1.50のHTTPd修正において、「通信エラーが発生した時に次の通信に失敗する事がある不具合を修正」の記述が抜けていたので、追加記述。
HTTPd修正
CGIで、404などの場合にでも、任意のエラーページを返す事ができるようにした。
CGI内で、httpd_send_http_prolog()を呼ばなかった時にのみ、デフォルトのエラーページが送られる。
Locationヘッダを正しく送信できない不具合修正。
outheader->locationに文字列がセットされていても、その文字列を正しくブラウザに送っていなかった。
CGIやEmbDataのリソース名の制限を無くした。
CGIやEmbDataのリソース名に"."が入っていなくても動作するようにした。
404等のエラーコード送信時でも、TCPを切断せずに、可能な限りkeepaliveするようにした。
以前はエラー時には必ず
・HTTP1.0で送信
・コネクションを切る
としていたが、 可能な限りkeepaliveするように変更。
HTTPc修正
httpc_set_socketが無駄に複数回呼ばれる事があるのを修正。
httpc_connect()内でhttpc_set_socket()を呼んでいたが、一度のhttpc_get()でhttpc_connect()が複数呼ばれる事があり、その度にhttpc_set_socket()が呼ばれていた。
一回一回のパケット受信タイムアウトではなく、サーバーとのトータルの通信タイムアウトを指定できるようにした。
HTTPC_USE_TOTAL_TIMEOUTとHTTPC_TOTAL_TIMEOUTを追加。詳しい使い方は、マニュアルを参照のこと。
cepが解放されない事があるのを修正
httpc_cls_cep()で失敗(タイムアウトなど)すると、cepの解放が行われないのを修正。
マルチパートデータのPOSTのサンプルを追加。
http/sample/cthttpc_sample2.cを追加。
Basic認証時に送る文字列を、"Authorization: BASIC"から"Authorizatino: Basic"に変更
一部の組み込みwebサーバーなどで、正しく動作しないケースが見つかった。RFC上はどちらでも良い事になっているが、多くのブラウザに合わせて、"BASIC"ではなく"Basic"を送るように変更。
HTTPd修正
Connection: keep-alive のヘッダを送信するときに、不正なタイムアウト値を送信していたので削除
Digest認証で、クライアントの最初のアクセスのときの認証にもstaleフラグをtrueにしていたバグを修正
SSLを導入すると、独自md5ルーチンでビルドエラーしてしまうのを修正
HTTPc修正
HTTP1.1対応
Hostヘッダ追加
キープアライブ対応
Chunkエンコーディング対応
Chunkエンコーディング対応に伴い、ボディ受信関数の構造を変更
通信のポート番号を指定出来るようにした
通信のタイムアウト指定出来るようにした
SSL通信のときに、サーバから送られてきた証明書内のホスト名をチェックするフラグを追加(T_HTTPC_REQHEADERのverify_hostname)
HTTP共通ルーチン修正
T_HTTP_AUTH_INFOの名称をT_HTTP_AUTH_TYPEに変更
Digest認証で使用するMD5ルーチンを、cryptoのものから独自実装へ変更し、HTTPd/c共通ルーチン化 HTTPcDigest認証対応のため、HTTPdで使用していたDigest認証ルーチンの一部をHTTP共通ルーチンへ移動
HTTPd修正
MD5独自ルーチン採用に伴う修正
CGI/SSI/HTMLの追加ルーチンで、エラーチェックを強化
認証関係のソースコードを一部整理
HTTPc修正
Cookie送受信に対応
Digest認証に対応
Hostヘッダに対応
httpc_iniに戻り値を追加
HTTPd修正
HTTPd内部での通信シーケンスを一新し、エラーフローが一箇所で行えるようになるように修正
Chunkエンコーディング機能を実装
POSTされたデータを保存する箇所をカスタマイズ化(httpd_save_post_data関数)
Digest認証で、nonce値をサーバで保存し、指定された時間間隔で更新するように修正
クライアントから複数行にまたがるヘッダを送られたときに解析できなかったバグを修正
MPF領域を使用禁止にしたT_INHEADERおよびT_OUTHEADER構造体は、文字列の実体をその構造体の中に持つようにした。
T_HTTPD_INTERNAL_INFO構造体を追加。T_INHEADERでもT_OUTHEADERでもない、HTTPd内部で使用する変数を、この構造体内にまとめた。
HTTPdでタスクごとに使用する構造体をT_HTTPD_SESSION構造体にまとめ、static領域で実体を宣言するようにした。
Cookieヘッダのパースにバグがあったのを修正。パース後のCookie情報を、各Cookieごとの情報と複数のCookie全体に対する情報とに区別した。
HTTPc修正
T_HTTPC_RSPHEADER構造体に、メンバbody_file_pathを追加。受信したボディ部のファイルシステムへの保存を実装した。
body用に用意したバッファのサイズが0のときも、HTTP通信を可能にした。
body用に用意したバッファが不足した場合も、すべてのボディ部を受信してからHTTPのコネクションを切るように修正。
HTTPd修正
HEADメソッドでは認証が通らないバグを修正
POSTメソッドでは認証が行われないバグを修正
qop値のパースの際にブラウザをチェックしてそれぞれの動作に合わせて処理を行っていたが、IE・NetScape以外のブラウザではパースできないケースがあった。ブラウザに関わらずqop値をパースで切るように修正。
http認証でclient_urlの格納バッファをHTTPD_LONGSTR_MAXで取るように修正
http認証で、URIがバッファに格納できない場合に414を返すように修正
OPTIONメソッドの処理シーケンスを追加
httpd_request関数呼出し後にエラーした後にメモリを開放し忘れていたので、修正
HTTPc修正
T_HTTPC_REQHEADER構造体に、メンバipifを追加。IPIFを指定しての通信を可能とした。
ctkernelに対応
他OSへの移植性向上のため、iTRON4のAPI名と構造体名にプレフィックスを付加
HTTPcで、SSLサーバーの認証をしないための方法を追加
T_HTTPC_REQHEADERのverify_peerを0にする事で、安全ではないサイトへ強制的に接続する事も可能にした。
HTTPd修正
拡張子判定の際に、拡張子が見つからない場合に不正アクセスしてしまう件を修正。
HTTPdのメモリプール領域が4の倍数ではない件を修正。
http_requ_header_analysis()で、strncasecmp(a,b,sizeof("文字列"))のバグを修正。
httpd_util_itoa()で、sizeofの使い方がおかしい件を修正。
httpd_util_get_string_by_key関数で、不正なデータ長チェックを削除。
httpd_util_get_string_by_key関数で、URLデコード後に不正な領域に を書き込んでいるバグを修正。
httpd_util_url_decode関数で、バッファ長によるループ終了条件が不正だったのを修正。
httpd_resp_send_error関数で、エラーHTMLに記述ミスがあったのを修正。
HTTPc修正
http_communication関数の返すエラー値が誤っているバグを修正。
httpd_util_get_string_by_key関数で、URLデコード後に不正な領域に を書き込んでいるバグを修正。
httpd_util_url_decode関数で、バッファ長によるループ終了条件が不正だったのを修正。
HTTPdでSSIを含んだページを正しく送信できない事がある
SSIを含んだページでも誤ったcontent-lengthを送信してしまうため、ブラウザが正しく表示できない。v1.31でのみ発生。
HTTPd修正
SSL有り・無しのタスクの共存を実装
httpd_get_auth_data関数に引数sockIDを追加
httpd_is_ssl_session関数を追加
httpd_get_https_port関数を追加
httpd_init_http_port関数を廃止
HTTPSD_MAXSESSIONマクロを追加
HTTPD_USE_SSLマクロを廃止
CGI関数にてT_OUTHEADERのメンバcontent_lenに値をセットした場合は、HTTP1.1でもChunkエンコーディングせずにContent-Lengthヘッダを付加するようにした。
Page 2 of 3