VizCommand #36 viewコマンドで画像(ビットマップファイル)の表示

画像を表示するviewコマンドを実装する。まず、WindowListItem.cppで、 OnCreateで、赤のペン、ブラシを、黒のペン、ブラシに変更。Console.cppで、 "view"と入力されたら、SendMessageでUM_STREAMCOMMAND。StreamConsole.hは、 OnViewを追加。StreamConsole…

VizCommand #35 walkコマンドでフォルダの移動

linuxコマンドのcdに相当するフォルダ移動コマンドwalkを実装する。Console.hで、 Consoleオブジェクトが生成された時のデフォルトカレントパスとしてm_tstrDefaultCurrentPathを用意。 コンストラクタもtstrDefaultCurrentPathを引数に取るものを追加。 そ…

VizCommand #34 アイテムズパネルが大きくなるたびに自動的に下にスクロール

これまで、アイテムズパネルが大きくなってスクロールバーが出てきて、どんどんウィンドウリストアイテムが追加されていっても、下に自動でスクロールされることはなく、自分で下までスクロールしないといけなかったが、今回は自動スクロールに対応する。res…

VizCommand #33 listコマンドの相対パス対応

これまではlistコマンドに渡すパスは絶対パスであったが、そろそろ相対パスにも対応したい。ConsoleCore.hで、 SetCurrentPath、GetCurrentPath、そしてGetFullPathを用意。ConsoleCore.cppで、 SetCurrentPathでは、Win32APIのSetCurrentDirectoryでカレン…

SHA1_Final

SHA1_Finalで結果を得る。/docs/man1.0.2/crypto/SHA1_Final.htmlSHA1_Final.cで、SHA1_Finalに渡したsha1にSHA1ハッシュ値が格納される。 $ vi SHA1_Final.c $ gcc -o SHA1_Final SHA1_Final.c -lcrypto $ ./SHA1_Final SHA1_Init success! SHA1_Update suc…

SHA1_Update

SHA1_Updateでデータソースを追加する。/docs/man1.0.2/crypto/SHA1_Update.htmlSHA1_Update.cで、SHA1_Updateにstrを渡す。 $ vi SHA1_Update.c $ gcc -o SHA1_Update SHA1_Update.c -lcrypto $ ./SHA1_Update SHA1_Init success! SHA1_Update success! $こ…

SHA1_Init

SHA1ハッシュの計算もできる。 SHA1_Initで初期化。/docs/man1.1.0/crypto/SHA1_Init.htmlSHA1_Init.cで、SHA1_InitにSHA_CTX型sha_ctxのアドレスを渡す。 $ vi SHA1_Init.c $ gcc -o SHA1_Init SHA1_Init.c -lcrypto $ ./SHA1_Init SHA1_Init success! $こ…

MD5_Final

MD5_Finalで、結果のハッシュ値を受け取れる。/docs/man1.0.2/crypto/MD5_Final.htmlMD5_Final.cで、MD5_Finalに長さMD5_DIGEST_LENGTHのunsigned char型配列md5を渡して、ハッシュ値を格納。 md5の要素を1つずつfor文で出力。 $ vi MD5_Final.c $ gcc -o MD…

MD5_Update

MD5_Updateでデータソース(変換元の文字列)を渡す。/docs/man1.0.2/crypto/MD5_Update.htmlMD5_Update.cで、MD5_Updateに文字列"ABCDE"を格納したchar型配列strを渡す. $ vi MD5_Update.c $ gcc -o MD5_Update MD5_Update.c -lcrypto $ ./MD5_Update MD5_Ini…

MD5_Init

OpenSSLには、MD5ハッシュ値の計算機能もある。 まずは、MD5_Initで初期化。md5_init(3): MD2, MD4, and MD5 hash functions - Linux man pageMD5_Init.cで、MD5_InitにMD5_CTX型md5_ctxのアドレスを渡す。 戻り値が1なら初期化成功。 $ vi MD5_Init.c $ gcc…

SSL_read

SSL_readでレスポンスを読み込む。/docs/man1.1.0/ssl/SSL_read.htmlSSL_read.cで、SSL_readで1023バイトずつ読み込んで、読み込んだバイトを出力していくのを繰り返す。 $ vi SSL_read.c $ gcc -o SSL_read SSL_read.c -lssl -lcrypto $ ./SSL_read connect…

SSL_write

SSL_writeでリクエストの書き込みを行う。/docs/man1.1.0/ssl/SSL_write.htmlSSL_write.cで、用意したGETリクエスト文字列をSSL_writeで書き込み、戻り値のwrittenには書き込めたバイト数が返る。 $ vi SSL_write.c $ gcc -o SSL_write SSL_write.c -lssl -l…

SSL_connect

SSL_connectでサーバとのSSLハンドシェイクを行う。/docs/man1.0.2/ssl/SSL_connect.htmlSSL_connect.cで、SSL_connectにsslを渡して、戻り値が1なら成功。 SSLの切断にはSSL_shutdownを呼ぶ。 $ vi SSL_connect.c $ gcc -o SSL_connect SSL_connect.c -lssl…

SSL_set_fd

SSL_set_fdで、SSL接続情報とソケットファイルディスクリプタを紐づけることで、そのソケット通信をSSL通信とすることができる。Manual:SSL set fd(3) - OpenSSLWikiSSL_set_fd.cで、"www.google.co.jp"にポート443で接続するソケットsocを作成し、SSL_set_f…

SSL_new

SSL_newで、SSL接続情報を作成することもできる。 BIOを使わないでSSL接続をする場合はこれを使う。/docs/man1.0.2/ssl/SSL_new.htmlSSL_new.cで、SSL_newにctxを渡すことで、sslを作成。 sslの指すアドレスを出力。 SSL_newで作成した場合は、SSL_freeでssl…

SSL_load_error_strings

SSL_load_error_stringsもエラー文字列を読み込む関数だが、ERR_load_BIO_stringsとはちょっと違う模様。/docs/man1.0.2/crypto/SSL_load_error_strings.htmlSSL_load_error_strings.cで、ERR_load_BIO_stringsに加えて、SSL_load_error_stringsも呼ぶ。 $ v…

ERR_load_BIO_strings

ERR_load_BIO_stringsで、エラー文字列をロードすることで、意味の分からないエラーコードをある程度エラー文字列に変換して出力させる。OpenSSL API によるセキュア・プログラミング: 第 1 回 API の概要ERR_load_BIO_strings.cで、最初にERR_load_BIO_stri…

ERR_print_errors_fp

ERR_print_errors_fpにファイルポインタを指定すると、そのストリームにOpenSSLのエラーメッセージを書き込む。/docs/man1.1.0/crypto/ERR_print_errors_fp.htmlERR_print_errors_fp.cで、SSL_CTX_load_verify_locationsで"dummyurl"という存在しないパスを…

SSL_get_verify_result

SSL_get_verify_resultで、接続先のSSL証明書の検証結果を取得する。 これで問題ないならば、リクエストの書き込みをするという流れとなる。/docs/man1.0.2/ssl/SSL_get_verify_result.htmlSSL_get_verify_result.cで、BIO_do_connectで接続後、SSL_get_veri…

BIO_set_conn_hostname

非セキュアな場合は、BIO_new_connectで接続先ホスト名とポートを指定していたが、セキュアな場合に、BIO_new_ssl_connectにはSSL_CTX型ポインタしか渡せないため、BIO_set_conn_hostnameを使う。bio_set_conn_hostname(3): connect BIO - Linux man pageBIO…

SSL_set_mode

SSL_set_modeでSSLモードを設定する。/docs/man1.1.0/ssl/SSL_get_mode.htmlSSL_set_mode.cで、SSL_get_modeでなにもセットされていないことを確認してから、SSL_set_modeでSSL_MODE_AUTO_RETRYをセットする。 SSL_get_modeを再び呼んで、ssl_modeにSSL_MODE…

SSL_get_mode

SSL_get_modeで、現在のSSLモードを取得できる。/docs/man1.0.2/ssl/SSL_get_mode.htmlSSL_get_mode.cで、SSL_get_modeにsslを渡すと、long型変数ssl_modeにSSLモードの値が返ってくる。 $ vi SSL_get_mode.c $ gcc -o SSL_get_mode SSL_get_mode.c -lssl -l…

BIO_get_ssl

BIO構造体ポインタのbioから、今度はSSL接続情報を持つSSL構造体ポインタのsslを取得する。 それにはBIO_get_sslを使う。bio_get_ssl(3): SSL BIO - Linux man pageBIO_get_ssl.cで、BIO_get_sslの第1引数にbioを渡し、第2引数にsslのアドレスを渡すと、ssl…

BIO_new_ssl_connect

SSLの場合は、BIO_new_ssl_connectでコネクション作成をする。bio_new_ssl_connect(3): SSL BIO - Linux man pageBIO_new_ssl_connect.cで、BIO_new_ssl_connectにctxを渡してbioを受け取って、bioを出力。 終わったらBIO_free_allで解放。 $ vi BIO_new_ssl…

SSL_CTX_load_verify_locations

セキュアな接続をするには、SSL_CTX_load_verify_locationsで、信頼できる証明書ストアをロードする必要がある。/docs/man1.0.2/ssl/SSL_CTX_load_verify_locations.htmlSSL_CTX_load_verify_locations.cで、SSL_CTX_load_verify_locationsにSSLコンテキスト…

VizCommand #32 listコマンドでパラメータ無しの場合にカレントパスを補完&デフォルトのカレントパスをマイドキュメントに変更

そろそろ、パラメータ無しでlistコマンドを使えるようにしたい。ConsoleCore.hで、 m_tstrMyDocumentPathとGetMyDocumentPathを追加。ConsoleCore.cppは、 このようにマイドキュメント(現在のユーザのドキュメント)のパスを取得。 GetMyDocumentPathで取得し…

VizCommand #31 listコマンドのCCommandクラス対応

コメントアウトしていたlistコマンドもCCommandに対応させる。Command.hに、 GetParamを追加。 また、tstring&ではなく、通常のtstringに変更。 (GetCommandNameも)Command.cppで、 GetParamは、m_vectstrCommandTokenの範囲内なら、index番目を返す。 そう…

VizCommand #30 コマンドの定義

コマンド文字列をハンドラにそのまま渡して、各所で(しかも何度も)パースさせるのもちょっと酷い。 そこで、コマンド文字列じゃなく、パース済みのコマンドオブジェクトを渡すようにコマンドクラスを定義する。Command.hを追加して、 CCommandのメンバ変数は…

SSL_CTX_new

今度はセキュアな接続をしていこうとおもう。 まずは、SSL情報を持つSSLコンテキストを作成する。 SSLコンテキストはSSL_CTX_newで作成する。/docs/man1.0.2/ssl/SSL_CTX_new.htmlSSL_CTX_new.cで、SSL_CTX型ポインタctxを用意。SSL_library_initで初期化を…

VizCommand #29 コンソールとファイルリストを連続して交互に表示

コンソールとファイルリストを連続して交互に表示する。StreamConsole.cppで、 OnCreateで、m_nId番目のアイテムとしてコンソールを挿入して表示するようにし、m_nIdを1増やす。 OnListでもm_nId番目のアイテムとしてファイルリストを表示し、m_nIdを1増やす…

VizCommand #28 listコマンドでリストビューでファイルリストを表示

アイコン表示のファイルリストを表示する"list"コマンドを実装する。resource.hで、 独自メッセージとしてUM_STREAMCOMMANDを定義。StreamConsole.hに、 リソースIDを持つメンバm_nId、OnUserMessage、OnStreamCommand、OnListを追加。StreamConsole.cppで、…

VizCommand #27 リストコントロールパネルの定義&リストコントロールの定義

リストコントロールパネルとその中のリストコントロールを定義する。ListControlPanel.hを追加し、 CListControlオブジェクトポインタm_pListControlを持つユーザコントロールCListControlPanel。ListControlPanel.cppは、 こんな感じ。ListControl.hは、 カ…

VizCommand #26 上キーが押された時の処理

上キーが押された時に、上に行かないように止める。ConsoleCore.cppで、 OnKeyDownで上キーが押されたら、-1を返して入力キャンセル。いくら上に押しても上には行かない。・上キーが押された時の処理 · bg1bgst333/VizCommand@eddbc7c · GitHub

VizCommand #25 コマンドが見つからない時のエラー&マウス左ボタンクリックで一瞬見えるキャレットを非表示にする

コマンドが無い場合のエラーと、左クリックでフォーム文字列を押された時の処理を実装する。Window.hで、 OnLButtonDownを追加。Window.cppで、 と というようにOnLButtonDownを実装。CustomControl.cppも、 OnLButtonDownを呼ぶ。ConsoleCore.hも、 OnLButt…

VizCommand #24 レスポンス中の改行を数えてその分だけ大きくする

レスポンスが複数行の場合、改行の数の分だけCConsoleを大きくしないとすべて表示できない。ConsoleCore.cppで、 改行の数だけm_iLineHeightを足してMoveWindowし、UM_SIZECHILDも送っている。Console.cppで、 "Hello, world!"に改行コード"\r\n"をつけてみ…

VizCommand #23 helloコマンドの実装

"hello"と入力したら、"Hello, world!"と返す、"hello"コマンドを実装する。resource.hで、 独自メッセージUM_CONSOLECORECOMMAND、UM_RESPONSEMESSAGE、UM_FINISHRESPONSEを追加。ConsoleCore.hは、 入力されたコマンドに対する処理を実行するウィンドウの…

VizCommand #22 コマンド文字列の取得

入力されたコマンド文字列だけを抜き出す。ConsoleCore.hで、 m_tstrCommandStringを追加。 GetCommandStringの戻り値をtstringにする。ConsoleCore.cppでは、 コンソール全体の文字列から、入力開始位置までを引いた分を抜き出す。 リターンキーが押された…

VizCommand #21 マウスの左クリックでキャレット位置を変更されたときの動作

バックスペースや左キーを防止しても、マウスの左クリックでキャレット位置をフォーム文字列などにセットできてしまうので、これも防止する。Window.hで、 OnLButtonUpを追加。Window.cppで、 マウスの左ボタンが離された時のWM_LBUTTONUPの時、OnLButtonUp…

VizCommand #20 左キーが押されたときの処理

左キーが押された時も、フォーム文字列の前で止める。Window.hで、 OnKeyDownの戻り値をvoidからintに変更。Window.cppで、 WM_KEYDOWNでOnKeyDownが-1なら入力キャンセル。 0を返す。ScalableEditBox.hでも、 OnKeyDownの戻り値をintに。ScalableEditBox.cp…

VizCommand #19 バックスペースキーが押されたときの処理

バックスペースキーが押された時、自分が入力したコマンド文字列より前のフォーム文字列などを削除しないように止める。Window.hで、 OnCharを追加。Window.cppで、 WM_CHARでOnCharを呼ぶ。 戻り値-1なら0を返して入力キャンセルをする。 通常は入力キャン…

VizCommand #18 フォームの出力

コマンドを入力するフォーム文字列を出力できるようにする。ConsoleCore.hで、 m_ptszCommandStringはやめて、ホームフォルダパスm_tstrProfilePath、現在のパスm_tstrCurrentPath、フォーム文字列m_tstrFormString、最終的に出力するm_tstrOutputFormString…

VizCommand #17 コンソール周辺のクラスを追加

いよいよコンソール周辺のクラスを追加していく。resource.hで、 GUI出力機能を持つコンソールとしてIDC_STREAMCONSOLEをリソースIDに定義。WindowListItemsPanel.cppで、 ペンとブラシを黒に。StreamConsole.hを追加して、 CWindowListControlの派生クラス…

VizCommand #16 アイテムおよびアイテムズパネルもスカラブルエディットボックスパネルのリサイズに追随する

ウィンドウリストアイテムやウィンドウリストアイテムズパネルが、スカラブルエディットボックスのリサイズに追随することで、違うアイテムが影響を受けても問題ないようにする。WindowListItemsPanel.hに、 OnUserMessage、OnSizeChildを追加。WindowListIt…

VizCommand #15 親ウィンドウのサイズを子ウィンドウのサイズに合わせる&スカラブルエディットボックスパネルの定義

スカラブルエディットボックスの親クラス、スカラブルエディットボックスパネルを定義する。 そして、スカラブルエディットボックスのサイズが1行分大きくなったら、スカラブルエディットボックスパネルのサイズも1行分大きくなり表示テキストが隠されないよ…

VizCommand #14 スカラブルエディットボックスの定義

改行するたびに1行分大きくなり、バックスペースで1行分のテキストが減るたびに小さくなる「スカラブルエディットボックス」を定義する。resource.hで、 リソースIDとしてIDC_SCALABLEEDIT1を追加。 また、ちょっと数字を変えている。Window.hは、 ブラシハ…

VizCommand #13 削除時の調整

アイテム削除時にPADDINGの調整をしてなかったので、それをする。WindowListItemsPanel.cppで、 削除時のPADDING。MainWindow.cppで、 アイテムを3つ挿入し、1番目を削除してみる。1番目が削除されても上下はずれてない。 何番目か見えるように左右はちょっ…

VizCommand #12 PADDINGマクロの定義

さすがに固定で3pxというのはどうかと思うので、PADDINGマクロ定数を用意し、それの値を3と定義する。resource.hで、 と定義し、 このように使う。 修正箇所がたくさんあるので割愛。表示には変化なし。・PADDINGマクロの定義 · bg1bgst333/VizCommand@1c4f0…

VizCommand #11 アイテムや子ウィンドウなどの下と右を調整

左と上は3pxごとに空けることができたが、右と下がまだ3pxごとに空いてないので調整する。WindowListItemsPanel.hに、 OnSizeを追加。WindowListItemsPanel.cppは、 Insertで指定するアイテムの幅をm_iWidth - (3 * 2)、高さをiHeight - (3 * 2)とする。 OnS…

VizCommand #10 エディットボックスパネルの定義

エディットボックスの外枠となる親ウィンドウエディットボックスパネルを定義する。WindowListItemsPanel.cppで、 アイテムをInsertするとき、3pxの余白を作る。WindowListControl.cppでも、 m_pWindowListItemsPanel->Createで3px空ける。MainWindow.cppで…

VizCommand #9 ウィンドウリストコントロールなどObjeqtNoteの進捗をVizCommandにも反映

ObjeqtNoteの進捗をVizCommandに反映。 量が多いので詳細は割愛。 1つウィンドウリストアイテムを挿入して、子コントロールとしてエディットボックスも配置。VizCommandでもウィンドウリストコントロールが使えるようになった。・ウィンドウリストコントロー…