memory.h
Functions
| Name | |
|---|---|
| void * | wolfSSL_Malloc(size_t size, void * heap, int type) この関数はmalloc()に似ていますが、wolfSSLが使用するように設定されたメモリ割り当て関数を呼び出します。デフォルトでは、wolfSSLはmalloc()を使用します。これはwolfSSLメモリ抽象化レイヤーを使用して変更できます _ wolfSSL_SetAllocators()を参照してください。wolfSSL_Mallocは直接wolfSSLによって呼び出されるのではなく、代わりにマクロXMALLOCによって呼び出されることに注意してください。 デフォルトのビルドでは、sizeパラメータのみが存在します。WOLFSSL_STATIC_MEMORYビルドを使用している場合は、heapとtypeパラメータが含まれます。 |
| void | wolfSSL_Free(void * ptr, void * heap, int type) この関数はfree()に似ていますが、wolfSSLが使用するように設定されたメモリ解放関数を呼び出します。デフォルトでは、wolfSSLはfree()を使用します。これはwolfSSLメモリ抽象化レイヤーを使用して変更できます _ wolfSSL_SetAllocators()を参照してください。wolfSSL_Freeは直接wolfSSLによって呼び出されるのではなく、代わりにマクロXFREEによって呼び出されることに注意してください。 デフォルトのビルドでは、ptrパラメータのみが存在します。WOLFSSL_STATIC_MEMORYビルドを使用している場合は、heapとtypeパラメータが含まれます。 |
| void * | wolfSSL_Realloc(void * ptr, size_t size, void * heap, int type) この関数はrealloc()に似ていますが、wolfSSLが使用するように設定されたメモリ再割り当て関数を呼び出します。デフォルトでは、wolfSSLはrealloc()を使用します。これはwolfSSLメモリ抽象化レイヤーを使用して変更できます _ wolfSSL_SetAllocators()を参照してください。 wolfSSL_Reallocは直接wolfSSLによって呼び出されるのではなく、代わりにマクロXREALLOCによって呼び出されることに注意してください。デフォルトのビルドでは、sizeパラメータのみが存在します。WOLFSSL_STATIC_MEMORYビルドを使用している場合は、heapとtypeパラメータが含まれます。 |
| int | wolfSSL_SetAllocators(wolfSSL_Malloc_cb , wolfSSL_Free_cb , wolfSSL_Realloc_cb ) この関数は、wolfSSLが使用する割り当て関数を登録します。デフォルトでは、システムがサポートしている場合、malloc/freeとreallocが使用されます。この関数を使用すると、ユーザーは実行時に独自のメモリハンドラをインストールできます。 |
| int | wolfSSL_StaticBufferSz(byte * buffer, word32 sz, int flag) この関数は、静的メモリ機能が使用されている場合に利用可能です(–enable-staticmemory)。メモリ「バケット」の最適なバッファサイズを提供します。これにより、パーティション化された後に余分な未使用メモリが残らないようにバッファサイズを計算する方法が提供されます。この関数の非_exバージョンでは、コンパイル時に設定されたデフォルトのバケットと配布リストが使用されます。 返される値が正の場合、使用する計算されたバッファサイズです。 |
| int | wolfSSL_MemoryPaddingSz(void ) この関数は、静的メモリ機能が使用されている場合に利用可能です(–enable-staticmemory)。メモリの各パーティションに必要なパディングのサイズを提供します。このパディングサイズは、メモリ管理構造体を含むために必要なサイズと、メモリアライメントのための追加分になります。 |
| int | wolfSSL_CTX_load_static_memory(WOLFSSL_CTX * ctx, wolfSSL_method_func method, unsigned char * buf, unsigned int sz, int flag, int max) この関数は、CTXのために静的メモリを確保するために使用されます。確保されたメモリは、CTXの存続期間中およびCTXから作成されたすべてのSSLオブジェクトに使用されます。NULLのctxポインタとwolfSSL_method_func関数を渡すことにより、CTX自体の作成も静的メモリを使用します。wolfSSL_method_funcは、WOLFSSL_METHOD (wolfSSL_method_func)(void heap);の関数シグネチャを持ちます。 maxに0を渡すと、設定されていないかのように動作し、最大同時使用制限が適用されません。 渡されるflag値は、メモリの使用方法と動作中の動作を決定します。 利用可能なフラグは次のとおりです。 |
| int | wolfSSL_CTX_is_static_memory(WOLFSSL_CTX * ctx, WOLFSSL_MEM_STATS * mem_stats) この関数は接続の動作を変更せず、静的メモリ使用に関する情報を収集するためにのみ使用されます。 |
| int | wolfSSL_is_static_memory(WOLFSSL * ssl, WOLFSSL_MEM_CONN_STATS * mem_stats) wolfSSL_is_static_memoryは、SSLの静的メモリ使用に関する情報を収集するために使用されます。戻り値は、静的メモリが使用されているかどうかを示し、WOLFSSL_MEM_CONN_STATSは、静的メモリをロードする際に親CTXにWOLFMEM_TRACK_STATSフラグが渡された場合にのみ入力されます。 |
| int | wc_LoadStaticMemory(WOLFSSL_HEAP_HINT * hint, unsigned char * buf, unsigned int sz, int flag, int max) この関数は、wolfCrypt使用のために静的メモリを確保するために使用されます。作成されたヒープヒントを関数に渡すことでメモリを使用できます。この例は、wc_InitRng_exを呼び出すときです。渡されるflag値は、メモリの使用方法と動作中の動作を決定します。一般的に、wolfCrypt操作はWOLFMEM_GENERALプールからメモリを使用します。 利用可能なフラグは次のとおりです。 |
| int | wc_LoadStaticMemory_ex(WOLFSSL_HEAP_HINT * hint, unsigned char * buf, unsigned int sz, int flag, int max, word16 * bucket_sizes, int bucket_count) この関数は、カスタムバケットサイズと配分を使用してwolfCrypt使用のために静的メモリを確保するために使用されます。作成されたヒープヒントを関数に渡すことでメモリを使用できます。この拡張バージョンでは、デフォルトの事前定義されたサイズを使用する代わりに、カスタムバケットサイズと配分を使用できます。 |
| WOLFSSL_HEAP_HINT * | wolfSSL_SetGlobalHeapHint(WOLFSSL_HEAP_HINT * hint) この関数は、NULLヒープヒントがメモリ割り当て関数に渡されたときに使用されるグローバルヒープヒントを設定します。これにより、アプリケーション全体で使用されるデフォルトのヒープヒントを設定できます。 |
| WOLFSSL_HEAP_HINT * | wolfSSL_GetGlobalHeapHint(void ) この関数は、NULLヒープヒントがメモリ割り当て関数に渡されたときに使用される現在のグローバルヒープヒントを取得します。 |
| int | wolfSSL_SetDebugMemoryCb(wolfSSL_DebugMemoryCb cb) この関数は、静的メモリ割り当て追跡用のデバッグコールバック関数を設定します。WOLFSSL_STATIC_MEMORY_DEBUG_CALLBACKビルドオプションと共に使用されます。コールバック関数は、メモリ割り当ておよび割り当て解除操作中に呼び出され、デバッグ情報を提供します。 |
| int | wc_UnloadStaticMemory(WOLFSSL_HEAP_HINT * hint) この関数は、静的メモリヒープと関連するミューテックスを解放します。静的メモリ割り当ての使用が完了したときに、リソースを適切にクリーンアップするために呼び出す必要があります。 |
| int | wolfSSL_StaticBufferSz_ex(unsigned int listSz, const word32 * sizeList, const word32 * distList, byte * buffer, word32 sz, int flag) この関数は、カスタムバケットサイズと配分を使用した静的メモリ割り当てに必要なバッファサイズを計算します。この拡張バージョンでは、デフォルトの事前定義されたサイズを使用する代わりに、カスタムバケットサイズを使用できます。 |
Functions Documentation
function wolfSSL_Malloc
void * wolfSSL_Malloc(
size_t size,
void * heap,
int type
)
この関数はmalloc()に似ていますが、wolfSSLが使用するように設定されたメモリ割り当て関数を呼び出します。デフォルトでは、wolfSSLはmalloc()を使用します。これはwolfSSLメモリ抽象化レイヤーを使用して変更できます - wolfSSL_SetAllocators()を参照してください。wolfSSL_Mallocは直接wolfSSLによって呼び出されるのではなく、代わりにマクロXMALLOCによって呼び出されることに注意してください。 デフォルトのビルドでは、sizeパラメータのみが存在します。WOLFSSL_STATIC_MEMORYビルドを使用している場合は、heapとtypeパラメータが含まれます。
Parameters:
- size 割り当てるメモリのバイト単位のサイズ。
- heap メモリに使用するヒープヒント。NULLにできます。
- type 動的タイプ(types.hのDYNAMIC_TYPE_リストを参照)。
See:
Return:
- pointer 成功した場合、この関数は割り当てられたメモリへのポインタを返します。
- error エラーがある場合、NULLが返されます。
Example
int* tenInts = (int*)wolfSSL_Malloc(sizeof(int)*10);
function wolfSSL_Free
void wolfSSL_Free(
void * ptr,
void * heap,
int type
)
この関数はfree()に似ていますが、wolfSSLが使用するように設定されたメモリ解放関数を呼び出します。デフォルトでは、wolfSSLはfree()を使用します。これはwolfSSLメモリ抽象化レイヤーを使用して変更できます - wolfSSL_SetAllocators()を参照してください。wolfSSL_Freeは直接wolfSSLによって呼び出されるのではなく、代わりにマクロXFREEによって呼び出されることに注意してください。 デフォルトのビルドでは、ptrパラメータのみが存在します。WOLFSSL_STATIC_MEMORYビルドを使用している場合は、heapとtypeパラメータが含まれます。
Parameters:
- ptr 解放するメモリへのポインタ。
- heap メモリに使用するヒープヒント。NULLにできます。
- type 動的タイプ(types.hのDYNAMIC_TYPE_リストを参照)。
See:
- wolfSSL_Alloc
- wolfSSL_Realloc
- wolfSSL_SetAllocators
- XMALLOC
- XFREE
- XREALLOC
Return: none 戻り値なし。
Example
int* tenInts = (int*)wolfSSL_Malloc(sizeof(int)*10);
// 必要に応じてデータを処理
...
if(tenInts) {
wolfSSL_Free(tenInts);
}
function wolfSSL_Realloc
void * wolfSSL_Realloc(
void * ptr,
size_t size,
void * heap,
int type
)
この関数はrealloc()に似ていますが、wolfSSLが使用するように設定されたメモリ再割り当て関数を呼び出します。デフォルトでは、wolfSSLはrealloc()を使用します。これはwolfSSLメモリ抽象化レイヤーを使用して変更できます - wolfSSL_SetAllocators()を参照してください。 wolfSSL_Reallocは直接wolfSSLによって呼び出されるのではなく、代わりにマクロXREALLOCによって呼び出されることに注意してください。デフォルトのビルドでは、sizeパラメータのみが存在します。WOLFSSL_STATIC_MEMORYビルドを使用している場合は、heapとtypeパラメータが含まれます。
Parameters:
- ptr 再割り当てする、以前に割り当てられたメモリへのポインタ。
- size 割り当てるバイト数。
- heap メモリに使用するヒープヒント。NULLにできます。
- type 動的タイプ(types.hのDYNAMIC_TYPE_リストを参照)。
See:
Return:
- pointer 成功した場合、この関数は再割り当てされたメモリへのポインタを返します。これはptrと同じポインタである場合もあれば、新しいポインタの場所である場合もあります。
- Null エラーがある場合、NULLが返されます。
Example
int* tenInts = (int*)wolfSSL_Malloc(sizeof(int)*10);
int* twentyInts = (int*)wolfSSL_Realloc(tenInts, sizeof(int)*20);
function wolfSSL_SetAllocators
int wolfSSL_SetAllocators(
wolfSSL_Malloc_cb ,
wolfSSL_Free_cb ,
wolfSSL_Realloc_cb
)
この関数は、wolfSSLが使用する割り当て関数を登録します。デフォルトでは、システムがサポートしている場合、malloc/freeとreallocが使用されます。この関数を使用すると、ユーザーは実行時に独自のメモリハンドラをインストールできます。
Parameters:
- malloc_function wolfSSLが使用するメモリ割り当て関数。関数シグネチャは上記のwolfSSL_Malloc_cbプロトタイプと一致する必要があります。
- free_function wolfSSLが使用するメモリ解放関数。関数シグネチャは上記のwolfSSL_Free_cbプロトタイプと一致する必要があります。
- realloc_function wolfSSLが使用するメモリ再割り当て関数。関数シグネチャは上記のwolfSSL_Realloc_cbプロトタイプと一致する必要があります。
See: none
Return:
- Success 成功した場合、この関数は0を返します。
- BAD_FUNC_ARG 関数ポインタが提供されていない場合に返されるエラー。
Example
static void* MyMalloc(size_t size)
{
// カスタムmalloc関数
}
static void MyFree(void* ptr)
{
// カスタムfree関数
}
static void* MyRealloc(void* ptr, size_t size)
{
// カスタムrealloc関数
}
// カスタムメモリ関数をwolfSSLに登録
int ret = wolfSSL_SetAllocators(MyMalloc, MyFree, MyRealloc);
if (ret != 0) {
// メモリ関数の設定に失敗
}
function wolfSSL_StaticBufferSz
int wolfSSL_StaticBufferSz(
byte * buffer,
word32 sz,
int flag
)
この関数は、静的メモリ機能が使用されている場合に利用可能です(–enable-staticmemory)。メモリ「バケット」の最適なバッファサイズを提供します。これにより、パーティション化された後に余分な未使用メモリが残らないようにバッファサイズを計算する方法が提供されます。この関数の非_exバージョンでは、コンパイル時に設定されたデフォルトのバケットと配布リストが使用されます。 返される値が正の場合、使用する計算されたバッファサイズです。
Parameters:
- buffer バッファへのポインタ。
- size バッファのサイズ。
- type 希望するメモリタイプ、つまりWOLFMEM_GENERALまたはWOLFMEM_IO_POOL。
See:
Return:
- Success バッファサイズの計算が正常に完了すると、正の値が返されます。この返される値は最適なバッファサイズです。
- Failure すべての負の値はエラーケースと見なされます。
Example
byte buffer[1000];
word32 size = sizeof(buffer);
int optimum;
optimum = wolfSSL_StaticBufferSz(buffer, size, WOLFMEM_GENERAL);
if (optimum < 0) { //エラーケースを処理 }
printf("すべてのメモリを利用するための最適なバッファサイズは %d です\n",
optimum);
...
function wolfSSL_MemoryPaddingSz
int wolfSSL_MemoryPaddingSz(
void
)
この関数は、静的メモリ機能が使用されている場合に利用可能です(–enable-staticmemory)。メモリの各パーティションに必要なパディングのサイズを提供します。このパディングサイズは、メモリ管理構造体を含むために必要なサイズと、メモリアライメントのための追加分になります。
Parameters:
- none パラメータなし。
See:
Return:
- メモリパディングの計算が成功すると、戻り値は正の値になります。
- すべての負の値はエラーケースと見なされます。
Example
int padding;
padding = wolfSSL_MemoryPaddingSz();
if (padding < 0) { //エラーケースを処理 }
printf("メモリの各「バケット」に必要なパディングサイズは %d です\n",
padding);
// IO POOLサイズのバッファの計算は、バケット数
// × (padding + WOLFMEM_IO_SZ)
...
function wolfSSL_CTX_load_static_memory
int wolfSSL_CTX_load_static_memory(
WOLFSSL_CTX ** ctx,
wolfSSL_method_func method,
unsigned char * buf,
unsigned int sz,
int flag,
int max
)
この関数は、CTXのために静的メモリを確保するために使用されます。確保されたメモリは、CTXの存続期間中およびCTXから作成されたすべてのSSLオブジェクトに使用されます。NULLのctxポインタとwolfSSL_method_func関数を渡すことにより、CTX自体の作成も静的メモリを使用します。wolfSSL_method_funcは、WOLFSSL_METHOD* (wolfSSL_method_func)(void heap);の関数シグネチャを持ちます。 maxに0を渡すと、設定されていないかのように動作し、最大同時使用制限が適用されません。 渡されるflag値は、メモリの使用方法と動作中の動作を決定します。 利用可能なフラグは次のとおりです。
Parameters:
- ctx WOLFSSL_CTX構造体へのポインタのアドレス。
- method プロトコルを作成する関数。(ctxもNULLでない場合はNULLである必要があります)
- buf すべての操作に使用するメモリ。
- sz 渡されるメモリバッファのサイズ。
- flag メモリのタイプ。
- max 最大同時操作数。
See:
Return:
- 成功した場合、SSL_SUCCESSが返されます。
- すべての失敗した戻り値は0未満またはSSL_FAILUREと等しくなります。
0 - デフォルトの一般メモリ
WOLFMEM_IO_POOL - メッセージの送受信時の入出力バッファに使用されます。一般メモリをオーバーライドするため、渡されたバッファ内のすべてのメモリがIOに使用されます。 WOLFMEM_IO_FIXED - WOLFMEM_IO_POOLと同じですが、各SSLは存続期間中に2つのバッファを保持します。 WOLFMEM_TRACK_STATS - 各SSLは実行中にメモリ統計を追跡します。
Example
WOLFSSL_CTX* ctx;
WOLFSSL* ssl;
int ret;
unsigned char memory[MAX];
int memorySz = MAX;
unsigned char IO[MAX];
int IOSz = MAX;
int flag = WOLFMEM_IO_FIXED | WOLFMEM_TRACK_STATS;
...
// 静的メモリを使用してctxも作成、使用する一般メモリから開始
ctx = NULL:
ret = wolfSSL_CTX_load_static_memory(&ctx, wolfSSLv23_server_method_ex, memory, memorySz, 0,
MAX_CONCURRENT_HANDSHAKES);
if (ret != SSL_SUCCESS) {
// エラーケースを処理
}
// IOで使用するメモリをロード
ret = wolfSSL_CTX_load_static_memory(&ctx, NULL, IO, IOSz, flag, MAX_CONCURRENT_IO);
if (ret != SSL_SUCCESS) {
// エラーケースを処理
}
...
function wolfSSL_CTX_is_static_memory
int wolfSSL_CTX_is_static_memory(
WOLFSSL_CTX * ctx,
WOLFSSL_MEM_STATS * mem_stats
)
この関数は接続の動作を変更せず、静的メモリ使用に関する情報を収集するためにのみ使用されます。
Parameters:
- ctx wolfSSL_CTX_new()を使用して作成されたWOLFSSL_CTX構造体へのポインタ。
- mem_stats 静的メモリ使用に関する情報を保持する構造体。
See:
Return:
- CTXに静的メモリを使用している場合は1の値が返されます。
- 静的メモリを使用していない場合は0が返されます。
Example
WOLFSSL_CTX* ctx;
int ret;
WOLFSSL_MEM_STATS mem_stats;
...
//CTXでの静的メモリに関する情報を取得
ret = wolfSSL_CTX_is_static_memory(ctx, &mem_stats);
if (ret == 1) {
// 静的メモリを使用しているケースを処理
// mem_statsの要素を出力または検査
}
if (ret == 0) {
//ctxが静的メモリを使用していないケースを処理
}
...
function wolfSSL_is_static_memory
int wolfSSL_is_static_memory(
WOLFSSL * ssl,
WOLFSSL_MEM_CONN_STATS * mem_stats
)
wolfSSL_is_static_memoryは、SSLの静的メモリ使用に関する情報を収集するために使用されます。戻り値は、静的メモリが使用されているかどうかを示し、WOLFSSL_MEM_CONN_STATSは、静的メモリをロードする際に親CTXにWOLFMEM_TRACK_STATSフラグが渡された場合にのみ入力されます。
Parameters:
- ssl wolfSSL_new()を使用して作成されたWOLFSSL構造体へのポインタ。
- mem_stats 静的メモリ使用を含む構造体。
See:
Return:
- CTXに静的メモリを使用している場合は1の値が返されます。
- 静的メモリを使用していない場合は0が返されます。
Example
WOLFSSL* ssl;
int ret;
WOLFSSL_MEM_CONN_STATS mem_stats;
...
ret = wolfSSL_is_static_memory(ssl, mem_stats);
if (ret == 1) {
// 静的メモリの場合のケースを処理
// WOLFMEM_TRACK_STATSフラグがある場合はmem_statsの要素を調査
}
...
function wc_LoadStaticMemory
int wc_LoadStaticMemory(
WOLFSSL_HEAP_HINT * hint,
unsigned char * buf,
unsigned int sz,
int flag,
int max
)
この関数は、wolfCrypt使用のために静的メモリを確保するために使用されます。作成されたヒープヒントを関数に渡すことでメモリを使用できます。この例は、wc_InitRng_exを呼び出すときです。渡されるflag値は、メモリの使用方法と動作中の動作を決定します。一般的に、wolfCrypt操作はWOLFMEM_GENERALプールからメモリを使用します。 利用可能なフラグは次のとおりです。
Parameters:
- hint 使用するWOLFSSL_HEAP_HINT構造体。
- buf すべての操作に使用するメモリ。
- sz 渡されるメモリバッファのサイズ。
- flag メモリのタイプ。
- max 最大同時操作数(ハンドシェイク、IO)。
See: none
Return:
- 成功した場合、0が返されます。
- すべての失敗した戻り値は0未満になります。
WOLFMEM_GENERAL - デフォルトの一般メモリ
WOLFMEM_IO_POOL - メッセージの送受信時の入出力バッファに使用されます。一般メモリをオーバーライドするため、渡されたバッファ内のすべてのメモリがIOに使用されます。 WOLFMEM_IO_FIXED - WOLFMEM_IO_POOLと同じですが、各SSLは存続期間中に2つのバッファを保持します。 WOLFMEM_TRACK_STATS - 各SSLは実行中にメモリ統計を追跡します。
Example
WOLFSSL_HEAP_HINT hint;
int ret;
unsigned char memory[MAX];
int memorySz = MAX;
int flag = WOLFMEM_GENERAL | WOLFMEM_TRACK_STATS;
...
// 使用するメモリをロード
ret = wc_LoadStaticMemory(&hint, memory, memorySz, flag, 0);
if (ret != SSL_SUCCESS) {
// エラーケースを処理
}
...
ret = wc_InitRng_ex(&rng, hint, 0);
// ret値をチェック
function wc_LoadStaticMemory_ex
int wc_LoadStaticMemory_ex(
WOLFSSL_HEAP_HINT * hint,
unsigned char * buf,
unsigned int sz,
int flag,
int max,
word16 * bucket_sizes,
int bucket_count
)
この関数は、カスタムバケットサイズと配分を使用してwolfCrypt使用のために静的メモリを確保するために使用されます。作成されたヒープヒントを関数に渡すことでメモリを使用できます。この拡張バージョンでは、デフォルトの事前定義されたサイズを使用する代わりに、カスタムバケットサイズと配分を使用できます。
Parameters:
- hint 使用するWOLFSSL_HEAP_HINT構造体。
- buf すべての操作に使用するメモリ。
- sz 渡されるメモリバッファのサイズ。
- flag メモリのタイプ。
- max 最大同時操作数(ハンドシェイク、IO)。
- bucket_sizes 使用するバケットサイズの配列。
- bucket_count 配列内のバケットサイズの数。
See:
Return:
- 成功した場合、0が返されます。
- すべての失敗した戻り値は0未満になります。
Example
WOLFSSL_HEAP_HINT hint;
int ret;
unsigned char memory[MAX];
int memorySz = MAX;
int flag = WOLFMEM_GENERAL | WOLFMEM_TRACK_STATS;
word16 bucket_sizes[] = {64, 128, 256, 512, 1024};
int bucket_count = 5;
...
// カスタムバケットサイズで使用するメモリをロード
ret = wc_LoadStaticMemory_ex(&hint, memory, memorySz, flag, 0,
bucket_sizes, bucket_count);
if (ret != SSL_SUCCESS) {
// エラーケースを処理
}
...
ret = wc_InitRng_ex(&rng, hint, 0);
// ret値をチェック
function wolfSSL_SetGlobalHeapHint
WOLFSSL_HEAP_HINT * wolfSSL_SetGlobalHeapHint(
WOLFSSL_HEAP_HINT * hint
)
この関数は、NULLヒープヒントがメモリ割り当て関数に渡されたときに使用されるグローバルヒープヒントを設定します。これにより、アプリケーション全体で使用されるデフォルトのヒープヒントを設定できます。
Parameters:
- hint グローバルヒープヒントとして使用するWOLFSSL_HEAP_HINT構造体。
See:
Return: 設定されていた以前のグローバルヒープヒントを返します。
Example
WOLFSSL_HEAP_HINT hint;
WOLFSSL_HEAP_HINT* prev_hint;
int ret;
unsigned char memory[MAX];
int memorySz = MAX;
...
// 使用するメモリをロード
ret = wc_LoadStaticMemory(&hint, memory, memorySz, WOLFMEM_GENERAL, 0);
if (ret != SSL_SUCCESS) {
// エラーケースを処理
}
// グローバルヒープヒントとして設定
prev_hint = wolfSSL_SetGlobalHeapHint(&hint);
if (prev_hint != NULL) {
// 以前のグローバルヒープヒントがありました
}
function wolfSSL_GetGlobalHeapHint
WOLFSSL_HEAP_HINT * wolfSSL_GetGlobalHeapHint(
void
)
この関数は、NULLヒープヒントがメモリ割り当て関数に渡されたときに使用される現在のグローバルヒープヒントを取得します。
Parameters:
- none パラメータなし。
See:
Return: 現在のグローバルヒープヒントを返します。設定されていない場合はNULLを返します。
Example
WOLFSSL_HEAP_HINT* current_hint;
...
current_hint = wolfSSL_GetGlobalHeapHint();
if (current_hint != NULL) {
// グローバルヒープヒントが設定されています
// current_hintを操作に使用できます
}
function wolfSSL_SetDebugMemoryCb
int wolfSSL_SetDebugMemoryCb(
wolfSSL_DebugMemoryCb cb
)
この関数は、静的メモリ割り当て追跡用のデバッグコールバック関数を設定します。WOLFSSL_STATIC_MEMORY_DEBUG_CALLBACKビルドオプションと共に使用されます。コールバック関数は、メモリ割り当ておよび割り当て解除操作中に呼び出され、デバッグ情報を提供します。
Parameters:
- cb 設定するデバッグコールバック関数。
See: none
Return:
- 成功した場合、0が返されます。
- すべての失敗した戻り値は0未満になります。
Example
static void debug_memory_cb(const char* func, const char* file, int line,
void* ptr, size_t size, int type)
{
printf("Memory %s: %s:%d ptr=%p size=%zu type=%d\n",
func, file, line, ptr, size, type);
}
...
// デバッグコールバックを設定
int ret = wolfSSL_SetDebugMemoryCb(debug_memory_cb);
if (ret != 0) {
// エラーケースを処理
}
function wc_UnloadStaticMemory
int wc_UnloadStaticMemory(
WOLFSSL_HEAP_HINT * hint
)
この関数は、静的メモリヒープと関連するミューテックスを解放します。静的メモリ割り当ての使用が完了したときに、リソースを適切にクリーンアップするために呼び出す必要があります。
Parameters:
- hint アンロードするWOLFSSL_HEAP_HINT構造体。
See:
Return:
- 成功した場合、0が返されます。
- すべての失敗した戻り値は0未満になります。
Example
WOLFSSL_HEAP_HINT hint;
int ret;
unsigned char memory[MAX];
int memorySz = MAX;
...
// 使用するメモリをロード
ret = wc_LoadStaticMemory(&hint, memory, memorySz, WOLFMEM_GENERAL, 0);
if (ret != SSL_SUCCESS) {
// エラーケースを処理
}
// 操作にメモリを使用
...
// 完了時にクリーンアップ
ret = wc_UnloadStaticMemory(&hint);
if (ret != 0) {
// エラーケースを処理
}
function wolfSSL_StaticBufferSz_ex
int wolfSSL_StaticBufferSz_ex(
unsigned int listSz,
const word32 * sizeList,
const word32 * distList,
byte * buffer,
word32 sz,
int flag
)
この関数は、カスタムバケットサイズと配分を使用した静的メモリ割り当てに必要なバッファサイズを計算します。この拡張バージョンでは、デフォルトの事前定義されたサイズを使用する代わりに、カスタムバケットサイズを使用できます。
Parameters:
- bucket_sizes 使用するバケットサイズの配列。
- bucket_count 配列内のバケットサイズの数。
- flag 希望するメモリタイプ、つまりWOLFMEM_GENERALまたはWOLFMEM_IO_POOL。
See:
Return:
- バッファサイズの計算が正常に完了すると、正の値が返されます。
- すべての負の値はエラーケースと見なされます。
Example
word32 sizeList[] = {64, 128, 256, 512, 1024};
word32 distList[] = {1, 2, 1, 1, 1};
int listSz = 5;
int optimum;
optimum = wolfSSL_StaticBufferSz_ex(listSz, sizeList, distList, NULL, 0,
WOLFMEM_GENERAL);
if (optimum < 0) { //エラーケースを処理 }
printf("カスタムバケットでの最適なバッファサイズは %d です\n", optimum);
...
Source code
void* wolfSSL_Malloc(size_t size, void* heap, int type);
void wolfSSL_Free(void *ptr, void* heap, int type);
void* wolfSSL_Realloc(void *ptr, size_t size, void* heap, int type);
int wolfSSL_SetAllocators(wolfSSL_Malloc_cb,
wolfSSL_Free_cb,
wolfSSL_Realloc_cb);
int wolfSSL_StaticBufferSz(byte* buffer, word32 sz, int flag);
int wolfSSL_MemoryPaddingSz(void);
int wolfSSL_CTX_load_static_memory(WOLFSSL_CTX** ctx, wolfSSL_method_func method,
unsigned char* buf, unsigned int sz, int flag, int max);
int wolfSSL_CTX_is_static_memory(WOLFSSL_CTX* ctx, WOLFSSL_MEM_STATS* mem_stats);
int wolfSSL_is_static_memory(WOLFSSL* ssl, WOLFSSL_MEM_CONN_STATS* mem_stats);
int wc_LoadStaticMemory(WOLFSSL_HEAP_HINT* hint, unsigned char* buf, unsigned int sz,
int flag, int max);
int wc_LoadStaticMemory_ex(WOLFSSL_HEAP_HINT* hint, unsigned char* buf, unsigned int sz,
int flag, int max, word16* bucket_sizes, int bucket_count);
WOLFSSL_HEAP_HINT* wolfSSL_SetGlobalHeapHint(WOLFSSL_HEAP_HINT* hint);
WOLFSSL_HEAP_HINT* wolfSSL_GetGlobalHeapHint(void);
int wolfSSL_SetDebugMemoryCb(wolfSSL_DebugMemoryCb cb);
int wc_UnloadStaticMemory(WOLFSSL_HEAP_HINT* hint);
int wolfSSL_StaticBufferSz_ex(unsigned int listSz,
const word32 *sizeList, const word32 *distList,
byte* buffer, word32 sz, int flag);
Updated on 2025-12-12 at 03:08:17 +0000