Document of c-modernization-kit (porter) 1.0.0

Loading...
Searching...
No Matches
Functions
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

Copyright
  Copyright (C) CompanyName, Ltd. 2026. All rights reserved.

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,
  POTR_ROLE_RECEIVER, on_recv, &handle) == POTR_SUCCESS) {
  // 受信待機中 (受信スレッドが動作)
  potrCloseService(handle);
  }
  POTR_SUCCESS
  #define POTR_SUCCESS
  成功の戻り値を表す定数。
  Definition porter_const.h:30
  potrOpenServiceFromConfig
  POTR_EXPORT int POTR_API potrOpenServiceFromConfig(const char *config_path, int64_t service_id, PotrRole role, PotrRecvCallback callback, PotrHandle *handle)
  設定ファイルから指定サービスを開きます。
  Definition potrOpenServiceFromConfig.c:22
  potrCloseService
  POTR_EXPORT int POTR_API potrCloseService(PotrHandle handle)
  サービスを閉じます。
  Definition potrCloseService.c:120
  PotrHandle
  struct PotrContext_ * PotrHandle
  セッションハンドル。
  Definition porter_type.h:238
  POTR_ROLE_RECEIVER
  @ POTR_ROLE_RECEIVER
  受信者。
  Definition porter_type.h:116
  PotrPeerId
  uint32_t PotrPeerId
  ピア識別子。
  Definition porter_type.h:32
  PotrEvent
  PotrEvent
  受信イベント種別。
  Definition porter_type.h:284
  POTR_EVENT_DISCONNECTED
  @ POTR_EVENT_DISCONNECTED
  切断を検知 (タイムアウト / FIN 受信 / REJECT 受信)。data=NULL, len=0。
  Definition porter_type.h:287
  POTR_EVENT_CONNECTED
  @ POTR_EVENT_CONNECTED
  送信者からの疎通を初検知 or 復帰。data=NULL, len=0。
  Definition porter_type.h:286
  on_recv
  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);
  potrCloseService(handle);
  }
  POTR_PEER_NA
  #define POTR_PEER_NA
  ピア ID 未割当を示す予約値。 1:1 モードのコールバックで渡される (ピアの概念がない)。 potrSend() に N:1 モードで指定した場合はエラーを返す。
  Definition porter_type.h:258
  potrSend
  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
  @ POTR_ROLE_SENDER
  送信者。
  Definition porter_type.h:115

スレッド セーフティ
  本関数はスレッドセーフです。
  異なるスレッドから独立したハンドルを取得するために並行して呼び出すことができます。
  ただし取得したハンドルはスレッドセーフではありません。
  同一ハンドルに対する操作は 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: