SSL_CTX_new

今度はセキュアな接続をしていこうとおもう。
まずは、SSL情報を持つSSLコンテキストを作成する。
SSLコンテキストはSSL_CTX_newで作成する。

/docs/man1.0.2/ssl/SSL_CTX_new.html

SSL_CTX_new.cで、

SSL_CTX型ポインタctxを用意。

SSL_library_initで初期化をする。
(SSL_library_initがないと、SSL_CTX_newでNULLが返ってくる。IBMのサンプルには無いけど。)

SSL_CTX_newにSSLv23_client_method関数を指定すると、SSLv2、SSLv3、TLSv1のどれかを利用することになる。
("必ずTLSv1にする"といった個別に指定する関数もある。)
コンテキストのポインタをctxに格納し、それを出力。

終わったら、SSL_CTX_freeでctxを解放。

$ vi SSL_CTX_new.c 
$ gcc -o SSL_CTX_new SSL_CTX_new.c -lssl -lcrypto
$ ./SSL_CTX_new 
ctx = 00d10820
$

SSLコンテキストを作成できた。

Sample/openssl/SSL_CTX_new/SSL_CTX_new/src/SSL_CTX_new at master · bg1bgst333/Sample · GitHub

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

コンソールとファイルリストを連続して交互に表示する。

StreamConsole.cppで、

OnCreateで、m_nId番目のアイテムとしてコンソールを挿入して表示するようにし、m_nIdを1増やす。

OnListでもm_nId番目のアイテムとしてファイルリストを表示し、m_nIdを1増やす。
その後、コンソールを挿入してm_nIdをさらに1増やす。

ConsoleCore.cppで、

OnCreateでSetFocusでフォーカスをセット。

f:id:BG1:20170505083302p:plain

最初からフォーカスがセットされているので、コマンドを入力して、リターンキーを押すと、

f:id:BG1:20170505083330p:plain

ファイルリスト、そして次の入力待ちに移ったので、ここでもコマンドを打つと、

f:id:BG1:20170505083412p:plain

また、ファイルリストが出る。
こんな感じで交互に表示できた。

・コンソールとファイルリストを連続して交互に表示 · bg1bgst333/VizCommand@b3d4637 · GitHub

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

アイコン表示のファイルリストを表示する"list"コマンドを実装する。

resource.hで、

独自メッセージとしてUM_STREAMCOMMANDを定義。

StreamConsole.hに、

リソースIDを持つメンバm_nId、OnUserMessage、OnStreamCommand、OnListを追加。

StreamConsole.cppで、

後述するCConsoleにもSetProcWindowを実装しているので、pConsole->SetProcWindowで自身のウィンドウハンドルを指定。

UM_STREAMCOMMANDでOnStreamCommandを呼ぶ、

コマンドと引数を分離して、"list"コマンドならOnListを呼ぶ。

リストビューで引数のパスのファイルリストを表示。
(即席で作ったので酷いコードになっている。いずれ修正したい。)

MainWindow.cppで、

ストリームコンソールが復活。

ListControlPanel.hは、

commctrl.hのインクルードを追加。

ListControlPanel.cppは、

InitCommonControlsでコモンコントロールの初期化。

Console.hは、

m_hProcWndとSetProcWindowを追加。

Console.cppは、

"list"コマンドならUM_STREAMCOMMANDを投げる。
(コマンドと引数のパースがいろんなとこに散らばっている。今後修正したい。)

ここでObjeqtNoteなどでは定義しているBinaryFile.hを追加。

BinaryFile.cppは、

OnListでファイル検索などに使っている。

f:id:BG1:20170505075359p:plain

comctl32.libやshlwapi.libをリンクする必要がある。

f:id:BG1:20170505075532p:plain

適当にファイルを置いて、

f:id:BG1:20170505075556p:plain

"list"のあとに、スペース区切りでパスを入れて、リターンキーを押すと、

f:id:BG1:20170505075647p:plain

こんな感じでアイコン一覧でファイルリストが表示される。

・listコマンドでリストビューでファイルリストを表示 · bg1bgst333/VizCommand@83492be · GitHub

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

リストコントロールパネルとその中のリストコントロールを定義する。

ListControlPanel.hを追加し、

CListControlオブジェクトポインタm_pListControlを持つユーザコントロールCListControlPanel。

ListControlPanel.cppは、

こんな感じ。

ListControl.hは、

カスタムコントロールCListControl。

ListControl.cppは、

リストビューのウィンドウクラスは"SysListView32"なので、これでCCustomControl::Createしている。

MainWindow.hでは、

CListControlPanelオブジェクトポインタm_pListControlPanelを追加。

MainWindow.cppは、

今回は、ストリームコンソールとかコメントして、リストコントロールパネルだけ。

MainApplication.cppでは、

リストコントロールパネルクラスの登録。

f:id:BG1:20170504200510p:plain

真っ白いけどウィンドウいっぱいのリストコントロール

・リストコントロールパネルの定義 · bg1bgst333/VizCommand@fc88e60 · GitHub

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

上キーが押された時に、上に行かないように止める。

ConsoleCore.cppで、

OnKeyDownで上キーが押されたら、-1を返して入力キャンセル。

f:id:BG1:20170504184858p:plain

いくら上に押しても上には行かない。

・上キーが押された時の処理 · bg1bgst333/VizCommand@eddbc7c · GitHub

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

コマンドが無い場合のエラーと、左クリックでフォーム文字列を押された時の処理を実装する。

Window.hで、

OnLButtonDownを追加。

Window.cppで、

というようにOnLButtonDownを実装。

CustomControl.cppも、

OnLButtonDownを呼ぶ。

ConsoleCore.hも、

OnLButtonDownを追加。

ConsoleCore.cppでは、

マウスが離された時はキャレット表示、マウスが押された時はキャレット非表示とする。

Console.hでは、

コマンドが見つからない時のエラー用独自ハンドラOnErrorCommandNotFoundを追加。

Console.cppでは、

用意されていないコマンドが入力されたら、OnErrorCommandNotFoundを呼ぶ。

OnErrorCommandNotFoundでは、"Error: Command not found!"を出力するようにする。

f:id:BG1:20170504183430p:plain

"hoge"コマンドは存在しないので、

f:id:BG1:20170504183448p:plain

エラーメッセージが出る。
また、フォーム文字列を押し続けてもキャレットは表示されない。

・コマンドが見つからない時のエラー · bg1bgst333/VizCommand@5fbbca5 · GitHub

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

レスポンスが複数行の場合、改行の数の分だけCConsoleを大きくしないとすべて表示できない。

ConsoleCore.cppで、

改行の数だけm_iLineHeightを足してMoveWindowし、UM_SIZECHILDも送っている。

Console.cppで、

"Hello, world!"に改行コード"\r\n"をつけてみる。

f:id:BG1:20170504174044p:plain

と入力し、リターンキーを押すと、

f:id:BG1:20170504174100p:plain

改行の分大きくなり、フォームは先頭から出力される。

・レスポンス中の改行を数えてその分だけ大きくする · bg1bgst333/VizCommand@7e82dfa · GitHub