SYNOPSIS

#include <stdlib.h>

#include <sys/uio.h>

#include <qb/qbipc_common.h>

#include <qb/qbhdb.h>

#include <qb/qbloop.h>

Data Structures

struct qb_ipcs_stats

struct qb_ipcs_connection_stats

struct qb_ipcs_poll_handlers

struct qb_ipcs_service_handlers

Typedefs

typedef struct qb_ipcs_connection qb_ipcs_connection_t

typedef struct qb_ipcs_service qb_ipcs_service_t

typedef int32_t(* qb_ipcs_dispatch_fn_t )(int32_t fd, int32_t revents, void *data)

typedef int32_t(* qb_ipcs_dispatch_add_fn )(enum qb_loop_priority p, int32_t fd, int32_t events, void *data, qb_ipcs_dispatch_fn_t fn)

typedef int32_t(* qb_ipcs_dispatch_mod_fn )(enum qb_loop_priority p, int32_t fd, int32_t events, void *data, qb_ipcs_dispatch_fn_t fn)

typedef int32_t(* qb_ipcs_dispatch_del_fn )(int32_t fd)

typedef int32_t(* qb_ipcs_job_add_fn )(enum qb_loop_priority p, void *data, qb_loop_job_dispatch_fn dispatch_fn)

typedef int32_t(* qb_ipcs_connection_accept_fn )(qb_ipcs_connection_t *c, uid_t uid, gid_t gid)

This callback is to check wether you want to accept a new connection. typedef void(* qb_ipcs_connection_created_fn )(qb_ipcs_connection_t *c)

This is called after a new connection has been created. typedef int32_t(* qb_ipcs_connection_closed_fn )(qb_ipcs_connection_t *c)

This is called after a connection has been disconnected. typedef void(* qb_ipcs_connection_destroyed_fn )(qb_ipcs_connection_t *c)

This is called just before a connection is freed. typedef int32_t(* qb_ipcs_msg_process_fn )(qb_ipcs_connection_t *c, void *data, size_t size)

This is the message processing calback.

Enumerations

enum qb_ipcs_rate_limit { QB_IPCS_RATE_FAST, QB_IPCS_RATE_NORMAL, QB_IPCS_RATE_SLOW, QB_IPCS_RATE_OFF, QB_IPCS_RATE_OFF_2 }

Functions

qb_ipcs_service_t * qb_ipcs_create (const char *name, int32_t service_id, enum qb_ipc_type type, struct qb_ipcs_service_handlers *handlers)

Create a new IPC server. void qb_ipcs_ref (qb_ipcs_service_t *s)

Increase the reference counter on the service object. void qb_ipcs_unref (qb_ipcs_service_t *s)

Decrease the reference counter on the service object. void qb_ipcs_poll_handlers_set (qb_ipcs_service_t *s, struct qb_ipcs_poll_handlers *handlers)

Set your poll callbacks. int32_t qb_ipcs_run (qb_ipcs_service_t *s)

run the new IPC server. void qb_ipcs_destroy (qb_ipcs_service_t *s)

Destroy the IPC server. void qb_ipcs_request_rate_limit (qb_ipcs_service_t *s, enum qb_ipcs_rate_limit rl)

Limit the incomming request rate. ssize_t qb_ipcs_response_send (qb_ipcs_connection_t *c, const void *data, size_t size)

Send a response to a incomming request. ssize_t qb_ipcs_response_sendv (qb_ipcs_connection_t *c, const struct iovec *iov, size_t iov_len)

Send a response to a incomming request. ssize_t qb_ipcs_event_send (qb_ipcs_connection_t *c, const void *data, size_t size)

Send an asyncronous event message to the client. ssize_t qb_ipcs_event_sendv (qb_ipcs_connection_t *c, const struct iovec *iov, size_t iov_len)

Send an asyncronous event message to the client. void qb_ipcs_connection_ref (qb_ipcs_connection_t *c)

Increment the connection's reference counter. void qb_ipcs_connection_unref (qb_ipcs_connection_t *c)

Decrement the connection's reference counter. void qb_ipcs_disconnect (qb_ipcs_connection_t *c)

Disconnect from this client. int32_t qb_ipcs_service_id_get (qb_ipcs_connection_t *c)

Get the service id related to this connection's service. void qb_ipcs_context_set (qb_ipcs_connection_t *c, void *context)

Associate a 'user' pointer with this connection. void * qb_ipcs_context_get (qb_ipcs_connection_t *c)

Get the context (set previously) int32_t qb_ipcs_connection_stats_get (qb_ipcs_connection_t *c, struct qb_ipcs_connection_stats *stats, int32_t clear_after_read)

Get the connection statistics. int32_t qb_ipcs_stats_get (qb_ipcs_service_t *pt, struct qb_ipcs_stats *stats, int32_t clear_after_read)

Get the service statistics. qb_ipcs_connection_t * qb_ipcs_connection_first_get (qb_ipcs_service_t *pt)

Get the first connection. qb_ipcs_connection_t * qb_ipcs_connection_next_get (qb_ipcs_service_t *pt, qb_ipcs_connection_t *current)

Get the next connection.

Detailed Description

Server IPC API.

Typedef Documentation

typedef int32_t(* \fBqb_ipcs_connection_accept_fn\fP)(\fBqb_ipcs_connection_t\fP *c, uid_t uid, gid_t gid)

This callback is to check wether you want to accept a new connection. The type of checks you should do are authentication, service availabilty or process resource constraints.

Returns:

0 to accept or -errno to indicate a failure (sent back to the client)

typedef int32_t(* \fBqb_ipcs_connection_closed_fn\fP)(\fBqb_ipcs_connection_t\fP *c)

This is called after a connection has been disconnected. Note:

if you return anything but 0 this function will be repeativily called (until 0 is returned).

typedef void(* \fBqb_ipcs_connection_created_fn\fP)(\fBqb_ipcs_connection_t\fP *c)

This is called after a new connection has been created.

typedef void(* \fBqb_ipcs_connection_destroyed_fn\fP)(\fBqb_ipcs_connection_t\fP *c)

This is called just before a connection is freed.

typedef struct qb_ipcs_connection \fBqb_ipcs_connection_t\fP

typedef int32_t(* \fBqb_ipcs_dispatch_add_fn\fP)(enum \fBqb_loop_priority\fP p, int32_t fd, int32_t events, void *data, \fBqb_ipcs_dispatch_fn_t\fP fn)

typedef int32_t(* \fBqb_ipcs_dispatch_del_fn\fP)(int32_t fd)

typedef int32_t(* \fBqb_ipcs_dispatch_fn_t\fP)(int32_t fd, int32_t revents, void *data)

typedef int32_t(* \fBqb_ipcs_dispatch_mod_fn\fP)(enum \fBqb_loop_priority\fP p, int32_t fd, int32_t events, void *data, \fBqb_ipcs_dispatch_fn_t\fP fn)

typedef int32_t(* \fBqb_ipcs_job_add_fn\fP)(enum \fBqb_loop_priority\fP p, void *data, \fBqb_loop_job_dispatch_fn\fP dispatch_fn)

typedef int32_t(* \fBqb_ipcs_msg_process_fn\fP)(\fBqb_ipcs_connection_t\fP *c, void *data, size_t size)

This is the message processing calback. It is called with the message data.

typedef struct qb_ipcs_service \fBqb_ipcs_service_t\fP

Enumeration Type Documentation

enum \fBqb_ipcs_rate_limit\fP

Enumerator:

QB_IPCS_RATE_FAST

QB_IPCS_RATE_NORMAL

QB_IPCS_RATE_SLOW

QB_IPCS_RATE_OFF

QB_IPCS_RATE_OFF_2

Function Documentation

\fBqb_ipcs_connection_t\fP* \fBqb_ipcs_connection_first_get\fP (\fBqb_ipcs_service_t\fP *pt)

Get the first connection. Note:

call qb_ipcs_connection_ref_dec() after using the connection.

Parameters:

pt service instance

Returns:

first connection

\fBqb_ipcs_connection_t\fP* \fBqb_ipcs_connection_next_get\fP (\fBqb_ipcs_service_t\fP *pt, \fBqb_ipcs_connection_t\fP *current)

Get the next connection. Note:

call qb_ipcs_connection_ref_dec() after using the connection.

Parameters:

pt service instance

current current connection

Returns:

next connection

void \fBqb_ipcs_connection_ref\fP (\fBqb_ipcs_connection_t\fP *c)

Increment the connection's reference counter. Parameters:

c connection instance

int32_t \fBqb_ipcs_connection_stats_get\fP (\fBqb_ipcs_connection_t\fP *c, struct \fBqb_ipcs_connection_stats\fP *stats, int32_tclear_after_read)

Get the connection statistics. Parameters:

stats (out) the statistics structure

clear_after_read clear stats after copying them into stats

c connection instance

Returns:

0 == ok; -errno to indicate a failure

void \fBqb_ipcs_connection_unref\fP (\fBqb_ipcs_connection_t\fP *c)

Decrement the connection's reference counter. Parameters:

c connection instance

void* \fBqb_ipcs_context_get\fP (\fBqb_ipcs_connection_t\fP *c)

Get the context (set previously) Parameters:

c connection instance

Returns:

the context

See also:

qb_ipcs_context_set()

void \fBqb_ipcs_context_set\fP (\fBqb_ipcs_connection_t\fP *c, void *context)

Associate a 'user' pointer with this connection. Parameters:

context the point to associate with this connection.

c connection instance

See also:

qb_ipcs_context_get()

\fBqb_ipcs_service_t\fP* \fBqb_ipcs_create\fP (const char *name, int32_tservice_id, enum \fBqb_ipc_type\fPtype, struct \fBqb_ipcs_service_handlers\fP *handlers)

Create a new IPC server. Parameters:

name for clients to connect to.

service_id an integer to associate with the service

type transport type.

handlers callbacks.

Returns:

the new service instance.

void \fBqb_ipcs_destroy\fP (\fBqb_ipcs_service_t\fP *s)

Destroy the IPC server. Parameters:

s service instance to destroy

void \fBqb_ipcs_disconnect\fP (\fBqb_ipcs_connection_t\fP *c)

Disconnect from this client. Parameters:

c connection instance

ssize_t \fBqb_ipcs_event_send\fP (\fBqb_ipcs_connection_t\fP *c, const void *data, size_tsize)

Send an asyncronous event message to the client. Parameters:

c connection instance

data the message to send

size the size of the message

Returns:

size sent or -errno for errors

ssize_t \fBqb_ipcs_event_sendv\fP (\fBqb_ipcs_connection_t\fP *c, const struct iovec *iov, size_tiov_len)

Send an asyncronous event message to the client. Parameters:

c connection instance

iov the iovec struct that points to the message to send

iov_len the number of iovecs.

Returns:

size sent or -errno for errors

void \fBqb_ipcs_poll_handlers_set\fP (\fBqb_ipcs_service_t\fP *s, struct \fBqb_ipcs_poll_handlers\fP *handlers)

Set your poll callbacks. Parameters:

s service instance

handlers the handlers that you want ipcs to use.

void \fBqb_ipcs_ref\fP (\fBqb_ipcs_service_t\fP *s)

Increase the reference counter on the service object. Parameters:

s service instance

void \fBqb_ipcs_request_rate_limit\fP (\fBqb_ipcs_service_t\fP *s, enum \fBqb_ipcs_rate_limit\fPrl)

Limit the incomming request rate. Parameters:

s service instance

rl the new rate

ssize_t \fBqb_ipcs_response_send\fP (\fBqb_ipcs_connection_t\fP *c, const void *data, size_tsize)

Send a response to a incomming request. Parameters:

c connection instance

data the message to send

size the size of the message

Returns:

size sent or -errno for errors

ssize_t \fBqb_ipcs_response_sendv\fP (\fBqb_ipcs_connection_t\fP *c, const struct iovec *iov, size_tiov_len)

Send a response to a incomming request. Parameters:

c connection instance

iov the iovec struct that points to the message to send

iov_len the number of iovecs.

Returns:

size sent or -errno for errors

int32_t \fBqb_ipcs_run\fP (\fBqb_ipcs_service_t\fP *s)

run the new IPC server. Parameters:

s service instance

Returns:

0 == ok; -errno to indicate a failure

int32_t \fBqb_ipcs_service_id_get\fP (\fBqb_ipcs_connection_t\fP *c)

Get the service id related to this connection's service. (as passed into qb_ipcs_create()

Returns:

service id.

int32_t \fBqb_ipcs_stats_get\fP (\fBqb_ipcs_service_t\fP *pt, struct \fBqb_ipcs_stats\fP *stats, int32_tclear_after_read)

Get the service statistics. Parameters:

stats (out) the statistics structure

clear_after_read clear stats after copying them into stats

pt service instance

Returns:

0 == ok; -errno to indicate a failure

void \fBqb_ipcs_unref\fP (\fBqb_ipcs_service_t\fP *s)

Decrease the reference counter on the service object. Parameters:

s service instance

Author

Generated automatically by Doxygen for libqb from the source code.