cMCP 0.4.1
Model Context Protocol library in pure C11
Loading...
Searching...
No Matches
Data Structures | Macros | Typedefs | Enumerations | Functions
cmcp_types.h File Reference

JSON-RPC 2.0 message shapes, capability structs, dispatch types. More...

#include <stddef.h>
#include "cmcp_json.h"

Go to the source code of this file.

Data Structures

struct  cmcp_server_capabilities_t
 
struct  cmcp_client_capabilities_t
 
struct  cmcp_id_t
 
struct  cmcp_rpc_error_t
 
struct  cmcp_rpc_message_t
 
struct  cmcp_rpc_route_t
 

Macros

#define CMCP_RPC_PARSE_ERROR   (-32700)
 
#define CMCP_RPC_INVALID_REQUEST   (-32600)
 
#define CMCP_RPC_METHOD_NOT_FOUND   (-32601)
 
#define CMCP_RPC_INVALID_PARAMS   (-32602)
 
#define CMCP_RPC_INTERNAL_ERROR   (-32603)
 
#define CMCP_RPC_SERVER_ERROR_MIN   (-32099)
 
#define CMCP_RPC_SERVER_ERROR_MAX   (-32000)
 

Typedefs

typedef struct cmcp_rpc_pending cmcp_rpc_pending_t
 
typedef int(* cmcp_rpc_handler_fn) (const cmcp_rpc_message_t *in, cmcp_rpc_message_t *out_response, void *userdata)
 

Enumerations

enum  cmcp_log_level_t {
  CMCP_LOG_LEVEL_DEBUG = 0 , CMCP_LOG_LEVEL_INFO = 1 , CMCP_LOG_LEVEL_NOTICE = 2 , CMCP_LOG_LEVEL_WARNING = 3 ,
  CMCP_LOG_LEVEL_ERROR = 4 , CMCP_LOG_LEVEL_CRITICAL = 5 , CMCP_LOG_LEVEL_ALERT = 6 , CMCP_LOG_LEVEL_EMERGENCY = 7
}
 
enum  cmcp_id_kind_t { CMCP_ID_NONE , CMCP_ID_NULL , CMCP_ID_INT , CMCP_ID_STRING }
 
enum  cmcp_msg_kind_t { CMCP_MSG_REQUEST , CMCP_MSG_RESPONSE , CMCP_MSG_NOTIFICATION }
 

Functions

const char * cmcp_log_level_to_name (cmcp_log_level_t lvl)
 
int cmcp_log_level_from_name (const char *name, cmcp_log_level_t *out_level)
 
void cmcp_id_init_none (cmcp_id_t *id)
 
void cmcp_id_init_null (cmcp_id_t *id)
 
void cmcp_id_init_int (cmcp_id_t *id, long long i)
 
int cmcp_id_init_string (cmcp_id_t *id, const char *s, size_t n)
 
int cmcp_id_copy (cmcp_id_t *dst, const cmcp_id_t *src)
 
void cmcp_id_clear (cmcp_id_t *id)
 
int cmcp_id_equal (const cmcp_id_t *a, const cmcp_id_t *b)
 
void cmcp_rpc_error_free (cmcp_rpc_error_t *e)
 
void cmcp_rpc_message_init (cmcp_rpc_message_t *m)
 
void cmcp_rpc_message_clear (cmcp_rpc_message_t *m)
 
int cmcp_rpc_parse (const char *text, size_t len, cmcp_rpc_message_t **out_msgs, size_t *out_count)
 
void cmcp_rpc_messages_free (cmcp_rpc_message_t *msgs, size_t count)
 
int cmcp_rpc_from_json (const cmcp_json_t *json, cmcp_rpc_message_t *out)
 
cmcp_json_t * cmcp_rpc_to_json (const cmcp_rpc_message_t *m)
 
char * cmcp_rpc_emit (const cmcp_rpc_message_t *m)
 
char * cmcp_rpc_emit_batch (const cmcp_rpc_message_t *msgs, size_t count)
 
int cmcp_rpc_make_request (cmcp_rpc_message_t *m, long long id, const char *method, cmcp_json_t *params)
 
int cmcp_rpc_make_request_str (cmcp_rpc_message_t *m, const char *id_str, size_t id_len, const char *method, cmcp_json_t *params)
 
int cmcp_rpc_make_notification (cmcp_rpc_message_t *m, const char *method, cmcp_json_t *params)
 
int cmcp_rpc_make_response (cmcp_rpc_message_t *m, const cmcp_id_t *id, cmcp_json_t *result)
 
int cmcp_rpc_make_error (cmcp_rpc_message_t *m, const cmcp_id_t *id, int code, const char *message, cmcp_json_t *data)
 
cmcp_rpc_pending_tcmcp_rpc_pending_new (void)
 
void cmcp_rpc_pending_free (cmcp_rpc_pending_t *t)
 
long long cmcp_rpc_pending_register (cmcp_rpc_pending_t *t, void *userdata)
 
int cmcp_rpc_pending_take (cmcp_rpc_pending_t *t, long long id, void **out_userdata)
 
size_t cmcp_rpc_pending_count (cmcp_rpc_pending_t *t)
 
void cmcp_rpc_pending_set_max_inflight (cmcp_rpc_pending_t *t, size_t cap)
 
size_t cmcp_rpc_pending_max_inflight (cmcp_rpc_pending_t *t)
 
int cmcp_rpc_dispatch (const cmcp_rpc_message_t *in, const cmcp_rpc_route_t *routes, size_t n_routes, cmcp_rpc_message_t *out_response)
 

Detailed Description

JSON-RPC 2.0 message shapes, capability structs, dispatch types.

Shared between server and client.

The "schema" of cMCP at the C-struct level: how a JSON-RPC request/response/notification looks in memory, what the server- and client-side capability objects carry, the JSON-RPC error-code constants. Most callers reach these through cmcp_server.h / cmcp_client.h rather than allocating these types directly.

Definition in file cmcp_types.h.

Macro Definition Documentation

◆ CMCP_RPC_PARSE_ERROR

#define CMCP_RPC_PARSE_ERROR   (-32700)

Definition at line 80 of file cmcp_types.h.

◆ CMCP_RPC_INVALID_REQUEST

#define CMCP_RPC_INVALID_REQUEST   (-32600)

Definition at line 81 of file cmcp_types.h.

◆ CMCP_RPC_METHOD_NOT_FOUND

#define CMCP_RPC_METHOD_NOT_FOUND   (-32601)

Definition at line 82 of file cmcp_types.h.

◆ CMCP_RPC_INVALID_PARAMS

#define CMCP_RPC_INVALID_PARAMS   (-32602)

Definition at line 83 of file cmcp_types.h.

◆ CMCP_RPC_INTERNAL_ERROR

#define CMCP_RPC_INTERNAL_ERROR   (-32603)

Definition at line 84 of file cmcp_types.h.

◆ CMCP_RPC_SERVER_ERROR_MIN

#define CMCP_RPC_SERVER_ERROR_MIN   (-32099)

Definition at line 88 of file cmcp_types.h.

◆ CMCP_RPC_SERVER_ERROR_MAX

#define CMCP_RPC_SERVER_ERROR_MAX   (-32000)

Definition at line 89 of file cmcp_types.h.

Typedef Documentation

◆ cmcp_rpc_pending_t

typedef struct cmcp_rpc_pending cmcp_rpc_pending_t

Definition at line 207 of file cmcp_types.h.

◆ cmcp_rpc_handler_fn

typedef int(* cmcp_rpc_handler_fn) (const cmcp_rpc_message_t *in, cmcp_rpc_message_t *out_response, void *userdata)

Definition at line 246 of file cmcp_types.h.

Enumeration Type Documentation

◆ cmcp_log_level_t

Enumerator
CMCP_LOG_LEVEL_DEBUG 
CMCP_LOG_LEVEL_INFO 
CMCP_LOG_LEVEL_NOTICE 
CMCP_LOG_LEVEL_WARNING 
CMCP_LOG_LEVEL_ERROR 
CMCP_LOG_LEVEL_CRITICAL 
CMCP_LOG_LEVEL_ALERT 
CMCP_LOG_LEVEL_EMERGENCY 

Definition at line 56 of file cmcp_types.h.

◆ cmcp_id_kind_t

Enumerator
CMCP_ID_NONE 
CMCP_ID_NULL 
CMCP_ID_INT 
CMCP_ID_STRING 

Definition at line 95 of file cmcp_types.h.

◆ cmcp_msg_kind_t

Enumerator
CMCP_MSG_REQUEST 
CMCP_MSG_RESPONSE 
CMCP_MSG_NOTIFICATION 

Definition at line 138 of file cmcp_types.h.

Function Documentation

◆ cmcp_log_level_to_name()

const char * cmcp_log_level_to_name ( cmcp_log_level_t  lvl)

◆ cmcp_log_level_from_name()

int cmcp_log_level_from_name ( const char *  name,
cmcp_log_level_t out_level 
)

◆ cmcp_id_init_none()

void cmcp_id_init_none ( cmcp_id_t id)

◆ cmcp_id_init_null()

void cmcp_id_init_null ( cmcp_id_t id)

◆ cmcp_id_init_int()

void cmcp_id_init_int ( cmcp_id_t id,
long long  i 
)

◆ cmcp_id_init_string()

int cmcp_id_init_string ( cmcp_id_t id,
const char *  s,
size_t  n 
)

◆ cmcp_id_copy()

int cmcp_id_copy ( cmcp_id_t dst,
const cmcp_id_t src 
)

◆ cmcp_id_clear()

void cmcp_id_clear ( cmcp_id_t id)

◆ cmcp_id_equal()

int cmcp_id_equal ( const cmcp_id_t a,
const cmcp_id_t b 
)

◆ cmcp_rpc_error_free()

void cmcp_rpc_error_free ( cmcp_rpc_error_t e)

◆ cmcp_rpc_message_init()

void cmcp_rpc_message_init ( cmcp_rpc_message_t m)

◆ cmcp_rpc_message_clear()

void cmcp_rpc_message_clear ( cmcp_rpc_message_t m)

◆ cmcp_rpc_parse()

int cmcp_rpc_parse ( const char *  text,
size_t  len,
cmcp_rpc_message_t **  out_msgs,
size_t *  out_count 
)

◆ cmcp_rpc_messages_free()

void cmcp_rpc_messages_free ( cmcp_rpc_message_t msgs,
size_t  count 
)

◆ cmcp_rpc_from_json()

int cmcp_rpc_from_json ( const cmcp_json_t *  json,
cmcp_rpc_message_t out 
)

◆ cmcp_rpc_to_json()

cmcp_json_t * cmcp_rpc_to_json ( const cmcp_rpc_message_t m)

◆ cmcp_rpc_emit()

char * cmcp_rpc_emit ( const cmcp_rpc_message_t m)

◆ cmcp_rpc_emit_batch()

char * cmcp_rpc_emit_batch ( const cmcp_rpc_message_t msgs,
size_t  count 
)

◆ cmcp_rpc_make_request()

int cmcp_rpc_make_request ( cmcp_rpc_message_t m,
long long  id,
const char *  method,
cmcp_json_t *  params 
)

◆ cmcp_rpc_make_request_str()

int cmcp_rpc_make_request_str ( cmcp_rpc_message_t m,
const char *  id_str,
size_t  id_len,
const char *  method,
cmcp_json_t *  params 
)

◆ cmcp_rpc_make_notification()

int cmcp_rpc_make_notification ( cmcp_rpc_message_t m,
const char *  method,
cmcp_json_t *  params 
)

◆ cmcp_rpc_make_response()

int cmcp_rpc_make_response ( cmcp_rpc_message_t m,
const cmcp_id_t id,
cmcp_json_t *  result 
)

◆ cmcp_rpc_make_error()

int cmcp_rpc_make_error ( cmcp_rpc_message_t m,
const cmcp_id_t id,
int  code,
const char *  message,
cmcp_json_t *  data 
)

◆ cmcp_rpc_pending_new()

cmcp_rpc_pending_t * cmcp_rpc_pending_new ( void  )

◆ cmcp_rpc_pending_free()

void cmcp_rpc_pending_free ( cmcp_rpc_pending_t t)

◆ cmcp_rpc_pending_register()

long long cmcp_rpc_pending_register ( cmcp_rpc_pending_t t,
void *  userdata 
)

◆ cmcp_rpc_pending_take()

int cmcp_rpc_pending_take ( cmcp_rpc_pending_t t,
long long  id,
void **  out_userdata 
)

◆ cmcp_rpc_pending_count()

size_t cmcp_rpc_pending_count ( cmcp_rpc_pending_t t)

◆ cmcp_rpc_pending_set_max_inflight()

void cmcp_rpc_pending_set_max_inflight ( cmcp_rpc_pending_t t,
size_t  cap 
)

◆ cmcp_rpc_pending_max_inflight()

size_t cmcp_rpc_pending_max_inflight ( cmcp_rpc_pending_t t)

◆ cmcp_rpc_dispatch()

int cmcp_rpc_dispatch ( const cmcp_rpc_message_t in,
const cmcp_rpc_route_t routes,
size_t  n_routes,
cmcp_rpc_message_t out_response 
)