|
Document of c-modernization-kit (porter) 1.0.0
|
通信ライブラリ (動的リンク用) のヘッダーファイル。 More...
#include <porter_type.h>Go to the source code of this file.
Macros | |
| #define | POTR_EXPORT |
| DLL エクスポート/インポート制御マクロ。 | |
| #define | POTR_API |
| 呼び出し規約マクロ。 | |
Functions | |
| POTR_EXPORT int POTR_API | potrOpenService (const PotrGlobalConfig *global, const PotrServiceDef *service, PotrRole role, PotrRecvCallback callback, PotrHandle *handle) |
| 設定構造体から指定サービスを開きます。 | |
| POTR_EXPORT int POTR_API | potrOpenServiceFromConfig (const char *config_path, int64_t service_id, PotrRole role, PotrRecvCallback callback, PotrHandle *handle) |
| 設定ファイルから指定サービスを開きます。 | |
| POTR_EXPORT int POTR_API | potrSend (PotrHandle handle, PotrPeerId peer_id, const void *data, size_t len, int flags) |
| メッセージを送信します。 | |
| POTR_EXPORT int POTR_API | potrDisconnectPeer (PotrHandle handle, PotrPeerId peer_id) |
| 指定ピアを切断します (N:1 モード専用)。 | |
| POTR_EXPORT int POTR_API | potrCloseService (PotrHandle handle) |
| サービスを閉じます。 | |
| POTR_EXPORT int POTR_API | potrLogConfig (PotrLogLevel level, const char *log_file, int console) |
| ロガーを設定します。 | |
| POTR_EXPORT int POTR_API | potrGetServiceType (const char *config_path, int64_t service_id, PotrType *type) |
| 設定ファイルから指定サービスの通信種別を取得します。 | |
通信ライブラリ (動的リンク用) のヘッダーファイル。
このライブラリは UDP/IP を用いたプラットフォーム間通信を提供します。
Linux / Windows クロスプラットフォーム対応の DLL として提供されます。
Definition in file porter.h.
| #define POTR_EXPORT |
DLL エクスポート/インポート制御マクロ。
ビルド条件に応じて以下の値を取ります。
| 条件 | 値 |
|---|---|
| Linux (非 Windows) | (空) |
| Windows / __INTELLISENSE__ 定義時 | (空) |
| Windows / POTR_STATIC 定義時 (静的リンク) | (空) |
| Windows / POTR_EXPORTS 定義時 (DLL ビルド) | __declspec(dllexport) |
| Windows / POTR_EXPORTS 未定義時 (DLL 利用側) | __declspec(dllimport) |
Definition at line 37 of file porter.h.
Referenced by potrCloseService(), potrDisconnectPeer(), potrGetServiceType(), potrLogConfig(), potrOpenService(), potrOpenServiceFromConfig(), and potrSend().
| #define POTR_API |
呼び出し規約マクロ。
Windows 環境では __stdcall 呼び出し規約を指定します。
Linux (非 Windows) 環境では空に展開されます。
既に定義済みの場合は再定義されません。
Definition at line 46 of file porter.h.
Referenced by potrCloseService(), potrDisconnectPeer(), potrGetServiceType(), potrLogConfig(), potrOpenService(), potrOpenServiceFromConfig(), and potrSend().
|
extern |
設定構造体から指定サービスを開きます。
| [in] | global | グローバル設定構造体へのポインタ。 |
| [in] | service | サービス定義構造体へのポインタ。 |
| [in] | role | 役割種別。POTR_ROLE_SENDER または POTR_ROLE_RECEIVER。 |
| [in] | callback | イベント発生時に呼び出されるコールバック関数 (PotrRecvCallback)。 POTR_ROLE_RECEIVER の場合は必須。データ受信・接続検知・切断検知を受け取る。 POTR_ROLE_SENDER の場合は通常 NULL を指定すること。 ただし POTR_TYPE_TCP_BIDIR および POTR_TYPE_UNICAST_BIDIR では SENDER にもコールバックが必須。これらの種別では POTR_ROLE_SENDER でも callback が NULL の場合は失敗を返します。 |
| [out] | handle | 成功時にセッションハンドルを格納するポインタ。 |
設定構造体からサービス定義を取得し、UDP ソケットを初期化します。
role と callback の組み合わせが不正な場合は POTR_ERROR を返します。
role と設定の IP アドレスが不整合 (bind 失敗など) の場合も POTR_ERROR を返します。
通信種別・役割に応じて以下のソケット設定を行います。
| 通信種別 | 役割 | bind アドレス | bind ポート |
|---|---|---|---|
| POTR_TYPE_UNICAST | 送信者 | src_addr | src_port |
| POTR_TYPE_UNICAST | 受信者 | dst_addr | dst_port |
| POTR_TYPE_MULTICAST | 送信者 | INADDR_ANY | src_port |
| POTR_TYPE_MULTICAST | 受信者 | INADDR_ANY | dst_port |
| POTR_TYPE_BROADCAST | 送信者 | src_addr | src_port |
| POTR_TYPE_BROADCAST | 受信者 | INADDR_ANY | dst_port |
POTR_ROLE_RECEIVER の場合、内部で受信スレッドを起動します。
Definition at line 445 of file potrOpenService.c.
References PotrServiceDef::broadcast_addr, PotrContext_::callback, comm_recv_thread_start(), PotrContext_::compress_buf, PotrContext_::compress_buf_size, PotrContext_::crypto_buf, PotrContext_::crypto_buf_size, ctx_cleanup(), PotrContext_::dest_addr, PotrServiceDef::dst_addr, PotrContext_::dst_addr_resolved, PotrServiceDef::dst_port, PotrServiceDef::encrypt_enabled, PotrContext_::frag_buf, generate_session(), PotrContext_::global, PotrGlobalConfig::health_interval_ms, PotrServiceDef::health_interval_ms, PotrContext_::health_mutex, PotrGlobalConfig::health_timeout_ms, PotrServiceDef::health_timeout_ms, PotrContext_::health_wakeup, PotrContext_::is_multi_peer, PotrGlobalConfig::max_message_size, PotrGlobalConfig::max_payload, PotrContext_::max_peers, PotrServiceDef::max_peers, PotrServiceDef::multicast_group, PotrContext_::n_path, open_socket_broadcast(), open_socket_multicast(), open_socket_tcp_receiver(), open_socket_tcp_sender(), open_socket_unicast(), PACKET_HEADER_SIZE, parse_ipv4_addr(), peer_table_init(), POTR_API, POTR_COMPRESS_HEADER_SIZE, potr_connect_thread_start(), POTR_CRYPTO_TAG_SIZE, POTR_ERROR, POTR_EXPORT, potr_health_thread_start(), potr_health_thread_stop(), POTR_INVALID_SOCKET, potr_is_tcp_type(), POTR_LOG, POTR_MAX_PATH, POTR_MAX_PAYLOAD, POTR_MAX_WINDOW_SIZE, potr_raw_base_type(), POTR_ROLE_RECEIVER, POTR_ROLE_SENDER, potr_send_queue_destroy(), potr_send_queue_init(), potr_send_thread_start(), potr_send_thread_stop(), POTR_SUCCESS, POTR_TRACE_ERROR, POTR_TRACE_INFO, POTR_TRACE_VERBOSE, POTR_TYPE_BROADCAST, POTR_TYPE_BROADCAST_RAW, POTR_TYPE_MULTICAST, POTR_TYPE_MULTICAST_RAW, POTR_TYPE_TCP, POTR_TYPE_TCP_BIDIR, POTR_TYPE_UNICAST, POTR_TYPE_UNICAST_BIDIR, POTR_TYPE_UNICAST_BIDIR_N1, POTR_TYPE_UNICAST_RAW, PotrContext_::recv_buf, PotrContext_::recv_window, PotrContext_::recv_window_mutex, resolve_ipv4_addr(), PotrContext_::role, PotrContext_::send_queue, PotrGlobalConfig::send_queue_depth, PotrContext_::send_window, PotrContext_::send_wire_buf, PotrContext_::service, PotrServiceDef::service_id, PotrContext_::sock, PotrServiceDef::src_addr, PotrContext_::src_addr_resolved, PotrServiceDef::src_port, PotrContext_::tcp_conn_fd, PotrGlobalConfig::tcp_health_interval_ms, PotrGlobalConfig::tcp_health_timeout_ms, PotrContext_::tcp_listen_sock, PotrContext_::tcp_send_mutex, PotrContext_::tcp_state_cv, PotrContext_::tcp_state_mutex, PotrServiceDef::type, window_init(), and PotrGlobalConfig::window_size.
Referenced by potrOpenServiceFromConfig().
|
extern |
設定ファイルから指定サービスを開きます。
| [in] | config_path | 設定ファイルのパス。 |
| [in] | service_id | 開くサービスの ID。 |
| [in] | role | 役割種別。POTR_ROLE_SENDER または POTR_ROLE_RECEIVER。 |
| [in] | callback | イベント発生時に呼び出されるコールバック関数 (PotrRecvCallback)。 POTR_ROLE_RECEIVER の場合は必須。データ受信・接続検知・切断検知を受け取る。 POTR_ROLE_SENDER の場合は通常 NULL を指定すること。 ただし POTR_TYPE_TCP_BIDIR および POTR_TYPE_UNICAST_BIDIR では SENDER にもコールバックが必須。これらの種別では POTR_ROLE_SENDER でも callback が NULL の場合は失敗を返します。 |
| [out] | handle | 成功時にセッションハンドルを格納するポインタ。 |
設定ファイルを解析してサービス定義を取得し、potrOpenService() を呼び出します。
role と callback の組み合わせが不正な場合は POTR_ERROR を返します。
role と設定ファイルの IP アドレスが不整合 (bind 失敗など) の場合も POTR_ERROR を返します。
通信種別・役割に応じて以下のソケット設定を行います。
| 通信種別 | 役割 | bind アドレス | bind ポート |
|---|---|---|---|
| POTR_TYPE_UNICAST | 送信者 | src_addr | src_port |
| POTR_TYPE_UNICAST | 受信者 | dst_addr | dst_port |
| POTR_TYPE_MULTICAST | 送信者 | INADDR_ANY | src_port |
| POTR_TYPE_MULTICAST | 受信者 | INADDR_ANY | dst_port |
| POTR_TYPE_BROADCAST | 送信者 | src_addr | src_port |
| POTR_TYPE_BROADCAST | 受信者 | INADDR_ANY | dst_port |
POTR_ROLE_RECEIVER の場合、内部で受信スレッドを起動します。
Definition at line 22 of file potrOpenServiceFromConfig.c.
References config_load_global(), config_load_service(), POTR_API, POTR_ERROR, POTR_EXPORT, POTR_LOG, POTR_SUCCESS, POTR_TRACE_ERROR, POTR_TRACE_VERBOSE, and potrOpenService().
Referenced by main().
|
extern |
メッセージを送信します。
| [in] | handle | potrOpenService() で取得したセッションハンドル。 |
| [in] | peer_id | 送信先ピア識別子。 N:1 モード: 有効なピア ID (POTR_PEER_NA / POTR_PEER_ALL 以外) を指定します。 N:1 モード: POTR_PEER_ALL を指定すると全接続ピアへ一斉送信します。 N:1 モード: POTR_PEER_NA を指定すると POTR_ERROR を返します。 1:1 モードおよびその他の通信種別: POTR_PEER_NA または POTR_PEER_ALL を指定します (通常は POTR_PEER_NA を使用)。 |
| [in] | data | 送信するメッセージへのポインタ。 |
| [in] | len | 送信するメッセージのバイト数。 |
| [in] | flags | 送信オプションフラグ。以下のフラグを論理和で組み合わせて指定します。 0 を指定すると非圧縮・ノンブロッキング送信になります。 |
| フラグ | 説明 |
|---|---|
| POTR_SEND_COMPRESS | メッセージを圧縮して送信します。 |
| POTR_SEND_BLOCKING | ブロッキング送信を行います。 |
通信種別に応じて以下の宛先へ UDP パケットを送信します。
| 通信種別 | 送信先 |
|---|---|
| POTR_TYPE_UNICAST | 接続相手の dst_port 宛にユニキャスト送信 |
| POTR_TYPE_MULTICAST | multicast_group:dst_port へ送信 |
| POTR_TYPE_BROADCAST | broadcast_addr:dst_port へ送信 |
| POTR_TYPE_UNICAST_BIDIR (N:1) | peer_id で指定したピアへ送信 |
compress に POTR_SEND_COMPRESS を指定した場合、内部で圧縮処理を行ってから送信します。
圧縮後のサイズが元のサイズ以上になった場合は、自動的に非圧縮で送信します。
受信側の PotrRecvCallback には、解凍済みの元メッセージが渡されます。
送受信ともにフラグメント化と組み合わせて使用できます。
Definition at line 88 of file potrSend.c.
References PotrPeerContext_::active, PotrContext_::compress_buf, PotrContext_::compress_buf_size, PotrContext_::global, PotrContext_::is_multi_peer, PotrGlobalConfig::max_message_size, PotrContext_::max_peers, peer_find_by_id(), PotrPeerContext_::peer_id, PotrContext_::peers, PotrContext_::peers_mutex, POTR_API, potr_compress(), POTR_ERROR, POTR_ERROR_DISCONNECTED, POTR_EXPORT, POTR_FLAG_COMPRESSED, potr_is_raw_type(), potr_is_tcp_type(), POTR_LOG, POTR_MUTEX_LOCK_LOCAL, POTR_MUTEX_UNLOCK_LOCAL, POTR_PEER_ALL, POTR_PEER_NA, POTR_SEND_BLOCKING, POTR_SEND_COMPRESS, POTR_SUCCESS, POTR_TRACE_ERROR, POTR_TRACE_VERBOSE, send_to_peer(), PotrContext_::service, PotrServiceDef::service_id, PotrContext_::tcp_active_paths, and PotrServiceDef::type.
Referenced by bidir_send_thread_func(), and main().
|
extern |
指定ピアを切断します (N:1 モード専用)。
| [in] | handle | potrOpenService() で取得したセッションハンドル。 |
| [in] | peer_id | 切断するピアの識別子 (POTR_PEER_NA および POTR_PEER_ALL 以外)。 |
指定したピアへ FIN パケットを送信し、ピアのリソースを解放します。
切断完了後に POTR_EVENT_DISCONNECTED コールバックが発火します。
N:1 モード (unicast_bidir かつ src 情報省略) 専用です。
1:1 モードおよびその他の通信種別では POTR_ERROR を返します。
Definition at line 35 of file potrDisconnectPeer.c.
References PotrContext_::callback, PotrPeerContext_::health_alive, PotrContext_::is_multi_peer, peer_find_by_id(), peer_free(), PotrPeerContext_::peer_id, peer_send_fin(), PotrContext_::peers_mutex, POTR_API, POTR_ERROR, POTR_EVENT_DISCONNECTED, POTR_EXPORT, POTR_LOG, POTR_MUTEX_LOCK_LOCAL, POTR_MUTEX_UNLOCK_LOCAL, POTR_PEER_ALL, POTR_PEER_NA, POTR_SUCCESS, POTR_TRACE_ERROR, POTR_TRACE_INFO, PotrContext_::service, and PotrServiceDef::service_id.
|
extern |
サービスを閉じます。
| [in] | handle | potrOpenService() で取得したセッションハンドル。 |
受信スレッドを停止し、ソケットをクローズしてリソースを解放します。
マルチキャストの場合はグループから離脱します。
本関数呼び出し後、handle は無効となります。
Definition at line 120 of file potrCloseService.c.
References comm_recv_thread_stop(), PotrContext_::compress_buf, PotrContext_::crypto_buf, PotrContext_::frag_buf, PotrContext_::health_mutex, PotrContext_::health_running, PotrContext_::health_wakeup, PotrContext_::is_multi_peer, PotrServiceDef::multicast_group, PotrContext_::n_path, parse_ipv4_addr(), peer_table_destroy(), PotrContext_::peers, POTR_API, potr_connect_thread_stop(), POTR_ERROR, POTR_EXPORT, potr_health_thread_stop(), POTR_INVALID_SOCKET, potr_is_tcp_type(), POTR_LOG, POTR_MAX_PATH, potr_raw_base_type(), POTR_ROLE_SENDER, potr_send_queue_destroy(), potr_send_queue_wait_drained(), potr_send_thread_stop(), POTR_SUCCESS, POTR_TRACE_ERROR, POTR_TRACE_INFO, POTR_TRACE_VERBOSE, POTR_TYPE_MULTICAST, POTR_TYPE_TCP_BIDIR, PotrContext_::recv_buf, PotrContext_::recv_window, PotrContext_::recv_window_mutex, PotrContext_::role, PotrContext_::running, send_fin(), PotrContext_::send_queue, PotrContext_::send_thread_running, PotrContext_::send_window, PotrContext_::send_wire_buf, PotrContext_::service, PotrServiceDef::service_id, PotrContext_::sock, PotrContext_::src_addr_resolved, PotrContext_::tcp_send_mutex, PotrContext_::tcp_state_cv, PotrContext_::tcp_state_mutex, PotrServiceDef::type, and window_destroy().
Referenced by main().
|
extern |
ロガーを設定します。
| [in] | level | 出力する最低ログレベル。POTR_TRACE_NONE でログ無効 (デフォルト)。 |
| [in] | log_file | ログファイルのパス。NULL または空文字列を指定するとファイル出力なし。 |
| [in] | console | 0 以外を指定すると標準エラー出力 (stderr) にも出力します。 |
本関数は potrOpenService() の前に呼び出してください。
複数回呼び出した場合は最後の設定が有効になります。
| OS | 出力先 |
|---|---|
| Linux | syslog (trace-util 経由)、ログファイル (trace-util 経由、log_file 指定時)、stderr (trace-util 経由、console 指定時) |
| Windows | ETW (trace-util 経由)、ログファイル (trace-util 経由、log_file 指定時)、stderr (trace-util 経由、console 指定時) |
| レベル | 値 | 出力内容 |
|---|---|---|
| POTR_TRACE_CRITICAL | 0 | 致命的エラー |
| POTR_TRACE_ERROR | 1 | 操作失敗 |
| POTR_TRACE_WARNING | 2 | NACK・REJECT・回復可能な異常 |
| POTR_TRACE_INFO | 3 | サービス開始・終了・接続状態変化 |
| POTR_TRACE_VERBOSE | 4 | ソケット操作・設定値・パケット送受信・スレッド動作 |
| POTR_TRACE_NONE | 5 | ログ無効 (デフォルト) |
Definition at line 72 of file potrLog.c.
References POTR_API, POTR_ERROR, POTR_EXPORT, POTR_SUCCESS, POTR_TRACE_NONE, and s_trace.
Referenced by main().
|
extern |
設定ファイルから指定サービスの通信種別を取得します。
| [in] | config_path | 設定ファイルのパス。 |
| [in] | service_id | 照会するサービスの ID。 |
| [out] | type | 成功時に通信種別 (PotrType) を格納するポインタ。 |
設定ファイルを解析して指定サービスの通信種別を返します。
potrOpenService() の前に呼び出すことで、ロール・コールバックの要否を アプリケーション側で判断できます。
本関数はソケットの作成や通信スレッドの起動を行いません。
Definition at line 20 of file potrGetServiceType.c.
References config_load_service(), POTR_API, POTR_ERROR, POTR_EXPORT, POTR_SUCCESS, and PotrServiceDef::type.
Referenced by main().