關於mbed TLS的想法
最近想弄https,有兩個選擇,用openssl或者mbed TLS,前者過於龐大,後者簡單很多,功能也很全。
但發現不好整合到corelooper
問題在於mbed TLS做的太多,包括建立socket,協商溝通,收發資料等
最精簡的情況下面,我們需要的是mbed TLS只提供兩個核心介面,input和output
class MbedTls;
class MbedTlsCB
{
public:
void Output(void *data, int bytes) = 0;
};
class MbedTls
{
public:
int Input(void *data, int bytes)
{
return -1;
}
MbedTlsCB *mCB = nullptr;
};
即mbed TLS只負責處理資料,不用管資料是怎麼來的和怎麼發出去的,更加不要直接/間接呼叫socket api
目前還沒有找到解決辦法
把https://tls.mbed.org上的帖子全部過了一遍,發現已有使用者提出類似的問題
https://tls.mbed.org/discussions/generic/adding-asynchronous-api-on-mbedtls
https://tls.mbed.org/discussions/generic/problems-with-handshake-implementation
https://tls.mbed.org/discussions/generic/handshake-with-asynchronous-io
另外也看了mbedtls提供的demo
ssl_server和ssl_server2
發現它只能依次逐個的響應使用者連線,或者用多執行緒來處理,每個執行緒響應一個使用者連線
沒法做到在一個執行緒中響應多個連線
感覺這樣很不好,現在還不清楚mbedtls內部細節,但如果是我來設計,肯定會用分層的概念,至少可分為兩層
libtls資料處理做成一個lib,只輸入和輸出資料,不做網路操作
libnet處理網路連線,收發
這兩個庫合起來完成目前mbedtls的功能,而第三方可以用自己的網路庫來替換libnet,只需要使用libtls即可