Document of c-modernization-kit (porter) 1.0.0
Loading...
Searching...
No Matches
potrOpenServiceFromConfig.c File Reference

potrOpenServiceFromConfig 関数の実装。 More...

#include <inttypes.h>
#include <porter_const.h>
#include <porter.h>
#include "../protocol/config.h"
#include "../infra/potrLog.h"
Include dependency graph for potrOpenServiceFromConfig.c:

Go to the source code of this file.

Functions

POTR_EXPORT int POTR_API potrOpenServiceFromConfig (const char *config_path, int64_t service_id, PotrRole role, PotrRecvCallback callback, PotrHandle *handle)
 設定ファイルから指定サービスを開きます。

Detailed Description

potrOpenServiceFromConfig 関数の実装。

Author
c-modernization-kit sample team
Date
2026/03/28
Version
1.0.0

Definition in file potrOpenServiceFromConfig.c.

Function Documentation

◆ potrOpenServiceFromConfig()

POTR_EXPORT int POTR_API potrOpenServiceFromConfig ( const char * config_path,
int64_t service_id,
PotrRole role,
PotrRecvCallback callback,
PotrHandle * handle )

設定ファイルから指定サービスを開きます。

Parameters
[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成功時にセッションハンドルを格納するポインタ。
Returns
成功時は POTR_SUCCESS、失敗時は POTR_ERROR を返します。

設定ファイルを解析してサービス定義を取得し、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 の場合、内部で受信スレッドを起動します。

使用例 (受信者)
void on_recv(int64_t service_id, PotrPeerId peer_id,
PotrEvent event, const void *data, size_t len) {
(void)peer_id; // 1:1 モードでは常に POTR_PEER_NA
if (event == POTR_EVENT_CONNECTED)
printf("service %" PRId64 ": connected\n", service_id);
else if (event == POTR_EVENT_DISCONNECTED)
printf("service %" PRId64 ": disconnected\n", service_id);
else
printf("service %" PRId64 ": received %zu bytes\n", service_id, len);
}
PotrHandle handle;
if (potrOpenServiceFromConfig("porter-services.conf", 1001,
// 受信待機中 (受信スレッドが動作)
}
#define POTR_SUCCESS
成功の戻り値を表す定数。
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 potrCloseService(PotrHandle handle)
サービスを閉じます。
struct PotrContext_ * PotrHandle
セッションハンドル。
@ POTR_ROLE_RECEIVER
受信者。
uint32_t PotrPeerId
ピア識別子。
Definition porter_type.h:32
PotrEvent
受信イベント種別。
@ POTR_EVENT_DISCONNECTED
切断を検知 (タイムアウト / FIN 受信 / REJECT 受信)。data=NULL, len=0。
@ POTR_EVENT_CONNECTED
送信者からの疎通を初検知 or 復帰。data=NULL, len=0。
static void on_recv(int64_t service_id, PotrPeerId peer_id, PotrEvent event, const void *data, size_t len)
受信コールバック関数。
Definition recv.c:122
使用例 (送信者)
PotrHandle handle;
if (potrOpenServiceFromConfig("porter-services.conf", 1001,
POTR_ROLE_SENDER, NULL, &handle) == POTR_SUCCESS) {
potrSend(handle, POTR_PEER_NA, "hello", 5, 0);
}
#define POTR_PEER_NA
ピア ID 未割当を示す予約値。 1:1 モードのコールバックで渡される (ピアの概念がない)。 potrSend() に N:1 モードで指定した場合はエラーを返す。
POTR_EXPORT int POTR_API potrSend(PotrHandle handle, PotrPeerId peer_id, const void *data, size_t len, int flags)
メッセージを送信します。
Definition potrSend.c:88
@ POTR_ROLE_SENDER
送信者。
スレッド セーフティ
本関数はスレッドセーフです。
異なるスレッドから独立したハンドルを取得するために並行して呼び出すことができます。
ただし取得したハンドルはスレッドセーフではありません。
同一ハンドルに対する操作は 1 スレッドから行ってください。
Warning
handle が NULL の場合は失敗を返します。
config_path が NULL または存在しない場合は失敗を返します。
指定した service_id が設定ファイルに存在しない場合は失敗を返します。
POTR_ROLE_RECEIVER かつ callback が NULL の場合は失敗を返します。
POTR_ROLE_SENDER かつ callback が NULL でない場合は失敗を返します。
ただし POTR_TYPE_TCP_BIDIR および POTR_TYPE_UNICAST_BIDIR では SENDER にも
コールバックが必須であり、この場合 callback が NULL の場合は失敗を返します。

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().

Here is the call graph for this function:
Here is the caller graph for this function: