void mrs_update()
MRSライブラリの状態を更新します
引数 void mrs_update_keep_alive()
MRSライブラリの全コネクションのキープアライブ状態を更新します
引数 void mrs_run( uint32 sleep_msec )
スリープしながらループし続けます
引数 uint32 mrs_get_connection_num_hard_limit()
MRSライブラリに埋め込まれている、同時接続数の絶対的な最大値(ハードリミット値)を返します
引数 uint32 mrs_get_connection_num_soft_limit()
アプリケーションがMRSライブラリに設定しているクライアントの最大接続数(ソフトリミット値)を返します。
引数 bool mrs_set_connection_num_soft_limit( uint32 value )
MRSライブラリ全体の最大接続数を設定します。ハードリミット値以下の値を設定できます。これをソフトリミットと呼びます。
引数 MrsServer mrs_server_create( MrsConnectionType type, const char* addr, uint16 port, int32 backlog )
TCPまたはUDP(RUDPを含む)のサーバーを作成して返します
引数type | 接続の種類。MRS_CONNECTION_TYPE_TCP, MRS_CONNECTION_TYPE_UDP,MRS_CONNECTION_TYPE_WS, MRS_CONNECTION_TYPE_WSS のいずれかを設定します |
addr | 受け入れるソケットのローカルアドレスをIPv4アドレスの数字表現で指定します。ドメイン名では指定できません。 インターネットの不特定多数向けのサービスの場合は "0.0.0.0"を指定し、ローカルマシンからのみに制限する場合は "127.0.0.1"を指定します。それ以外のアドレスも指定可能です。 |
port | TCPまたはUDPのポート番号を指定します。0~65535の範囲で決定してください。 |
backlog | TCPの場合はソケットのバックログの数(OSが保持している、acceptが呼び出される前のソケットの数)を指定します。短時間に大量の新しい接続を受け入れるようなサービスの場合にこれを大きくしてください。通常は10で問題ありません。UDPの場合は、1つのMrsServerあたりの最大の同時接続数を指定します。 |
void mrs_server_set_new_connection_callback( MrsServer server, MrsNewConnectionCallback callback )
MRSサーバが新しい接続を受け入れたときに呼び出すコールバック関数を定義します
引数server | 設定する対象となるサーバ |
callback | アプリケーションが定義するコールバック関数へのポインタ。コールバック関数のプロトタイプは次のようになっています。 void new_conn_callback( MrsServer server, MrsConnection client ) このコールバックでは第1引数にサーバ、第2引数に新しいクライアントが渡されます。 |
bool mrs_server_set_data( MrsServer server, void* server_data )
MrsServer に対して任意のポインタをひも付けます
引数server | 設定する対象となるサーバ |
server_data | 任意のデータへのポインタ |
void* mrs_server_get_data( MrsServer server )
MrsServerに対してひも付けられているポインタ値を取得します
引数server | 設定する対象となるサーバ |
MrsConnection mrs_connect( MrsConnectionType type, const char* addr, uint16 port, uint32 timeout_msec )
新しい接続(MrsConnection)をひとつ割り当てて初期化し、接続を開始します。
引数type | 使用するトランスポート層プロトコルを指定します。サーバと同じ値を指定してください。 |
addr | サーバが待ち受けているホストのIPv4アドレスを "192.168.1.232"のような数字の表現で指定します。 |
port | TCPまたはUDPのポート番号を指定します。0~65535の範囲で決定してください。 |
timeout_msec | 接続失敗と判定されるまでのタイムアウト時間をミリ秒で指定します。 |
void mrs_set_connect_callback( MrsConnection connection, MrsConnectCallback callback )
サーバへの接続が完了したことを検出するためのコールバック関数を設定します
引数connection | 設定する対象となる接続 |
callback | コールバック関数 |
void mrs_set_disconnect_callback( MrsConnection connection, MrsDisconnectCallback callback )
接続が切れたときに呼び出されるコールバック関数を設定します
引数connection | 設定する対象となる接続 |
callback | コールバック関数のポインタ |
void mrs_set_error_callback( MrsConnection connection, MrsErrorCallback callback )
接続において何らかのエラーが発生したことを検出するためのコールバック関数を設定します
引数connection | 設定する対象となる接続 |
callback | コールバック関数のポインタ |
void mrs_set_read_record_callback( MrsConnection connection, MrsReadRecordCallback callback )
接続において接続相手が送信したレコードを1個受信するごとに1回呼ばれるコールバック関数を設定します
引数connection | 設定する対象となる接続 |
callback | コールバック関数のポインタ |
void mrs_set_read_callback( MrsConnection connection, MrsReadCallback callback )
接続において接続相手が送信したバイナリデータを受信するごとに1回呼ばれるコールバック関数を設定します
引数connection | 設定する対象となる接続 |
callback | コールバック関数のポインタ |
bool mrs_connection_set_data( MrsConnection connection, void* connection_data )
接続に対して、アプリケーションが任意のポインタをひも付けます
引数connection | 設定する対象となる接続 |
connection_data | 任意のデータへのポインタ |
void* mrs_connection_get_data( MrsConnection connection )
mrs_connection_set_data 関数で設定したポインタの値を取得します
引数connection | 設定する対象となる接続 |
bool mrs_connection_is_connected( MrsConnection connection )
MrsConnectionがサーバへの接続を完了しているかどうかを調べます
引数connection | ポインタを取り出す対象トなる接続 |
bool mrs_connection_set_readbuf_max_size( MrsConnection connection, uint32 value )
MrsConnectionの読み込みバッファの最大サイズを設定します
引数connection | 設定対象の接続 |
value | 読み込みバッファの最大サイズ |
uint32 mrs_connection_get_readbuf_max_size( MrsConnection connection )
MrsConnectionの読み込みバッファの最大サイズを取得します
引数connection | 設定対象の接続 |
MrsConnectionType mrs_connection_get_type( MrsConnection connection )
MrsConnectionに設定されているプロトコルを返します
引数connection | 対象となる接続 |
bool mrs_connection_set_path( MrsConnection connection, const char* value )
MrsConnectionの接続先のパスを設定します
引数connection | 設定対象の接続 |
value | 接続先のパス |
const char* mrs_connection_get_path( MrsConnection connection )
MrsConnectionの接続先のパスを取得します
引数connection | 設定対象の接続 |
bool mrs_write_record( MrsConnection connection, uint16 options, uint16 payload_type, const void* payload, uint32 payload_len )
接続に対して、レコードを1個送信します
引数connection | レコードを送信する対象となる接続 |
options | レコードを送信するときのオプションを設定します。オプションはレコードごとに異なる値を設定できます。 設定可能な値は、MrsRecordOption列挙体で定義されている定数を、ORビット演算子でつないで複数同時に指定可能です。 |
payload_type | 送信したいデータの種別をアプリケーションが自由に指定します。PAYLOAD_TYPE_BEGIN と MRS_PAYLOAD_TYPE_END の間の値を設定してください。 PAYLOAD_TYPE_BEGINは現在は0, MRS_PAYLOAD_TYPE_ENDは現在は0xffとなっていますが、将来は変更される可能性があります。 |
payload | 送信したいデータの先頭アドレスです。データの内容はバイナリデータで、0を含んでいても問題なく送信できます。 |
payload_len | 送信したいデータの長さ(バイト)です。 |
bool mrs_write( MrsConnection connection, const void* data, uint32 data_len )
接続に対して、バイナリデータを送信します
引数connection | レコードを送信する対象となる接続 |
data | 送信したいデータの先頭アドレスです。データの内容はバイナリデータで、0を含んでいても問題なく送信できます。 |
data_len | 送信したいデータの長さ(バイト)です。 |
void mrs_close( MrsConnection connection )
接続を閉じます
引数connection | 操作対象の接続 |
MrsCipher mrs_cipher_create( MrsCipherType type )
MrsCipherを作成します
引数type | 鍵交換アルゴリズムの種類を指定します。 現在利用可能なのは MRS_CIPHER_TYPE_ECDH のみです。 |
void mrs_set_cipher( MrsConnection connection, MrsCipher cipher )
接続に対してMrsCipherを登録します。
引数connection | 登録対象となる接続 |
cipher | 登録したいMrsCipher |
bool mrs_key_exchange( MrsConnection connection, MrsKeyExchangeCallback callback )
鍵交換を開始するよう指示します
引数connection | 鍵交換を開始する接続 |
callback | 鍵交換が完了したときに呼び出されるコールバック関数 |
void mrs_set_output_log_level( MrsLogLevel level )
MRSライブラリのログ出力レベルを設定します
引数level | 設定するログ出力レベル |
bool mrs_is_output_log_level( MrsLogLevel level )
MRSライブラリのログ出力可能なレベルか判定します
引数level | 判定するログ出力レベル |
void mrs_output_log( MrsLogLevel level, const char* msg )
ログレベルを指定してログを出力します
引数level | 出力したいログのレベル |
msg | メッセージ |
MrsLogOutputCallback mrs_get_log_callback()
ログを出力するために設定されているコールバック関数を取得します
引数 void mrs_set_log_callback( MrsLogOutputCallback callback )
ログを出力するためのコールバック関数を設定します
引数callback | コールバック関数 |
void mrs_console_log( MrsLogLevel level, const char* msg )
MRSのログを標準出力に出力する関数
引数level | mrs_output_log関数に指定されたログ出力レベルがそのまま渡されます |
msg | mrs_output_log関数に指定されたログメッセージがそのまま渡されます |
const char* mrs_get_error_string( MrsError error )
エラー番号を文字列に変換します
引数error | エラーコード。通常は mrs_get_last_errorの値を入力します |
const char* mrs_get_connection_error_string( MrsConnectionError error )
接続に関するエラー番号を文字列に変換します
引数error | エラーコード。通常は MrsErrorCallbackのstatus値を入力します |
void mrs_set_keep_alive_update_msec( uint32 update_msec )
キープアライブ更新時間の設定
引数update_msec | キープアライブを更新するミリ秒数 |
void mrs_set_version( const char* key, uint32 value )
バージョンの設定
引数key | 設定対象バージョンのキー |
value | 設定対象バージョンの値 |
uint32 mrs_connection_get_remote_version( MrsConnection connection, const char* key )
接続先のバージョンの取得
引数connection | 取得対象の接続 |
key | 取得対象バージョンのキー |
MrsLogLevel
MRS_LOG_LEVEL_EMERG | システムが使用不可 |
MRS_LOG_LEVEL_ALERT | 直ちに行動を起こさなければならない |
MRS_LOG_LEVEL_CRIT | 危険な状態 |
MRS_LOG_LEVEL_ERR | エラー |
MRS_LOG_LEVEL_WARNING | 警告 |
MRS_LOG_LEVEL_NOTICE | 通常だが重要な状態 |
MRS_LOG_LEVEL_INFO | 参考にすべきメッセージ |
MRS_LOG_LEVEL_DEBUG | デバッグレベルのメッセージ |
MrsConnectionType
MRS_CONNECTION_TYPE_NONE | 未定義 |
MRS_CONNECTION_TYPE_TCP | TCP |
MRS_CONNECTION_TYPE_UDP | UDP(RUDPを使う場合はこの値を選択します) |
MRS_CONNECTION_TYPE_WS | WS(通常のWebSocketを使う場合はこの値を選択します) |
MRS_CONNECTION_TYPE_WSS | WSS(通信経路が暗号化されたWebSocketを使う場合はこの値を選択します) |
MRS_CONNECTION_TYPE_TCP_SSL | TCP_SSL(通信経路が暗号化されたTCPを使う場合はこの値を選択します) |
MRS_CONNECTION_TYPE_MRU | Monobit独自R-UDP |
MrsError
MRS_NO_ERROR | エラーなし |
MRS_ENOENT | ファイルやディレクトリが存在しない |
MRS_ENOMEM | メモリが不足している |
MRS_EACCES | アクセス権限が不足している(1024以下のポート番号など) |
MRS_EMFILE | これ以上ファイル(ソケット)を開けない(ulimitの設定が必要です) |
MRS_EADDRINUSE | ポート番号がすでに使われている |
MRS_EADDRNOTAVAIL | クライアント側で必要なポート番号を使い切っている |
MRS_ENETUNREACH | 到達できないネットワークである |
MRS_ETIMEDOUT | 操作はタイムアウトした |
MRS_EHOSTUNREACH | 到達できないホストである |
MRS_ECONNECTIONTYPE | 不正な接続の種別コード (MrsConnectionの値が不正) |
MRS_EBACKLOG | mrs_server_create 関数のbacklogの値が不正(大きすぎる) |
MRS_ECONNECTIONNUM | mrs_get_connection_num_hard_limit 関数の値より多いクライアントを生成した |
MrsConnectionError
MRS_CONNECT_ERROR | MrsConnectionにおいてTCPのconnect()に失敗した(サーバがポートを開いていないなど) |
MRS_CONNECT_TIMEOUT | MrsConnectionにおいてTCPのconnect()の時間切れ(サーバマシン自体が起動していないか、アドレスを間違えているなど) |
MRS_WRITE_ERROR | 接続に対して書き込みができなかった |
MRS_KEY_EXCHANGE_REQUEST_ERROR | 鍵交換の開始要求を送信できなかった |
MRS_KEY_EXCHANGE_RESPONSE_ERROR | 鍵交換の返信を送信できなかった |
MRS_PEER_CONNECTION_HARD_LIMIT_OVER | 接続相手がコネクション上限に達している |
MRS_CONNECTION_READBUF_SIZE_OVER | 読み込みバッファを越えたデータを受信した |
MRS_KEEPALIVE_TIMEOUT | 一定時間無通信状態によるタイムアウトを検出した |
MRS_PROTOCOL_ERROR | 接続相手のプロトコルが不正 |
MRS_READ_INVALID_RECORD_ERROR | 読み込んだレコードが不正 |
MRS_LISTEN_ERROR | ソケットの待ち受け処理に失敗した(既に同じポートが使われているなど) |
MRS_RESOLVE_ADDRESS_ERROR | アドレス解決処理に失敗した |
MRS_RESOLVE_ADDRESS_TIMEOUT | アドレス解決処理の時間切れ |
MRS_WRITE_ERROR_MRU_OVER_MTU | MTU以上に長いデータを送ろうとした(MRUのみ) |
MRS_WRITE_ERROR_MRU_SENDQ_FULL | 送信キューがあふれている(MRUのみ) |
MrsRecordOption
MRS_RECORD_OPTION_NONE | オプションを設定しない |
MRS_RECORD_OPTION_ON_CRYPT | レコードを暗号化して送信する |
MRS_RECORD_OPTION_UDP_UNRELIABLE | UDPにおいて信頼性保証(再送処理)をせずにレコードを送信する |
MRS_RECORD_OPTION_UDP_UNSEQUENCED | UDPにおいて到着順序保証をせずにレコードを送信する |
MrsPayloadType
MRS_PAYLOAD_TYPE_BEGIN | 0x00. アプリケーションが利用可能な最小の値 |
MRS_PAYLOAD_TYPE_END | 0xff. アプリケーションが利用可能な最大の値 |
typedef void ( *MrsLogOutputCallback)( MrsLogLevel level, const char* msg )
ログが1回出力されるごとに呼び出されるコールバック関数
引数level | mrs_output_log 関数の呼び出し時に指定されたログ出力レベルの値 |
msg | 出力されたログメッセージ |
typedef void ( *MrsNewConnectionCallback)( MrsServer server, void* server_data, MrsConnection client )
新しい接続を受け入れたときに呼び出されるコールバック関数
引数server | どのサーバに対する接続要求かをあらわすMrsServer |
server_data | mrs_server_set_data 関数で設定されたアプリケーションの任意のデータポインタ |
client | 新しく受け入れた接続 |
typedef void ( *MrsConnectCallback)( MrsConnection connection, void* connection_data )
サーバへの接続に成功した時に呼び出されるコールバック関数
引数connection | サーバへの接続処理に成功した接続 |
connection_data | 接続に対してアプリケーションが設定した任意のデータポインタ |
typedef void ( *MrsDisconnectCallback)( MrsConnection connection, void* connection_data )
接続が切断したときに呼び出されるコールバック関数
引数connection | 切断が発生した接続 |
connection_data | 接続に対してアプリケーションが設定した任意のデータポインタ |
typedef void ( *MrsErrorCallback)( MrsConnection connection, void* connection_data, MrsConnectionError status )
接続でエラーが発生したときに呼び出されるコールバック関数
引数connection | エラーが発生した接続 |
connection_data | 接続に対してアプリケーションが設定した任意のデータポインタ |
status | エラー種別コード |
typedef void ( *MrsReadRecordCallback)( MrsConnection connection, void* connection_data, uint32 seqnum, uint16 options, uint16 payload_type, const void* payload, uint32 payload_len )
レコードを1個受信したときに呼び出されるコールバック関数
引数connection | レコードを受信した接続 |
connection_data | 接続に対してアプリケーションが設定した任意のデータポインタ |
seqnum | 送信側が付与した通し番号 |
options | 送信側が設定した送信オプション |
payload_type | 送信側が設定したペイロード種別 |
payload | 送信されたデータ |
payload_len | 送信されたデータの長さ(バイト数) |
typedef void ( *MrsReadCallback)( MrsConnection connection, void* connection_data, const void* data, uint32 data_len )
バイナリデータを受信したときに呼び出されるコールバック関数
引数connection | レコードを受信した接続 |
connection_data | 接続に対してアプリケーションが設定した任意のデータポインタ |
data | 送信されたデータ |
data_len | 送信されたデータの長さ(バイト数) |
typedef void ( *MrsKeyExchangeCallback)( MrsConnection connection, void* connection_data )
鍵交換が完了したときに呼ばれるコールバック関数
引数connection | 鍵交換が完了した接続 |
connection_data | 接続に対してアプリケーションが設定した任意のデータポインタ |