1
0
mirror of https://github.com/haiwen/ccnet-server.git synced 2025-05-06 14:16:19 +00:00
ccnet-server/lib/ccnet-rpc-wrapper.c
2016-08-19 13:54:34 +08:00

326 lines
7.8 KiB
C

/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
#include "include.h"
#include <ccnet.h>
#include <ccnet-object.h>
#include <searpc-client.h>
#include <ccnet/ccnetrpc-transport.h>
SearpcClient *
ccnet_create_rpc_client (CcnetClient *cclient,
const char *peer_id,
const char *service_name)
{
SearpcClient *rpc_client;
CcnetrpcTransportParam *priv;
priv = g_new0(CcnetrpcTransportParam, 1);
priv->session = cclient;
priv->peer_id = g_strdup(peer_id);
priv->service = g_strdup(service_name);
rpc_client = searpc_client_new ();
rpc_client->send = ccnetrpc_transport_send;
rpc_client->arg = priv;
return rpc_client;
}
SearpcClient *
ccnet_create_pooled_rpc_client (struct CcnetClientPool *cpool,
const char *peer_id,
const char *service)
{
SearpcClient *rpc_client;
CcnetrpcTransportParam *priv;
priv = g_new0(CcnetrpcTransportParam, 1);
priv->pool = cpool;
priv->peer_id = g_strdup(peer_id);
priv->service = g_strdup(service);
rpc_client = searpc_client_new ();
rpc_client->send = ccnetrpc_transport_send;
rpc_client->arg = priv;
return rpc_client;
}
SearpcClient *
ccnet_create_async_rpc_client (CcnetClient *cclient, const char *peer_id,
const char *service_name)
{
SearpcClient *rpc_client;
CcnetrpcAsyncTransportParam *async_priv;
async_priv = g_new0 (CcnetrpcAsyncTransportParam, 1);
async_priv->session = cclient;
async_priv->peer_id = g_strdup(peer_id);
async_priv->service = g_strdup (service_name);
rpc_client = searpc_client_new ();
rpc_client->async_send = ccnetrpc_async_transport_send;
rpc_client->async_arg = async_priv;
return rpc_client;
}
void
ccnet_rpc_client_free (SearpcClient *client)
{
CcnetrpcTransportParam *priv;
if (!client) return;
priv = client->arg;
g_free (priv->peer_id);
g_free (priv->service);
g_free (priv);
searpc_client_free (client);
}
void
ccnet_async_rpc_client_free (SearpcClient *client)
{
CcnetrpcAsyncTransportParam *priv = client->arg;
g_free (priv->peer_id);
g_free (priv->service);
g_free (priv);
searpc_client_free (client);
}
CcnetPeer *
ccnet_get_peer (SearpcClient *client, const char *peer_id)
{
if (!peer_id)
return NULL;
return (CcnetPeer *) searpc_client_call__object(
client, "get_peer",CCNET_TYPE_PEER, NULL,
1, "string", peer_id);
}
CcnetPeer *
ccnet_get_peer_by_idname (SearpcClient *client, const char *idname)
{
if (!idname)
return NULL;
return (CcnetPeer *) searpc_client_call__object(
client, "get_peer_by_idname", CCNET_TYPE_PEER, NULL,
1, "string", idname);
}
int
ccnet_get_peer_net_state (SearpcClient *client, const char *peer_id)
{
CcnetPeer *peer;
int ret;
peer = ccnet_get_peer (client, peer_id);
if (!peer)
return PEER_DOWN;
ret = peer->net_state;
g_object_unref (peer);
return ret;
}
int
ccnet_get_peer_bind_status (SearpcClient *client, const char *peer_id)
{
CcnetPeer *peer;
int ret;
peer = ccnet_get_peer (client, peer_id);
if (!peer)
return BIND_UNKNOWN;
ret = peer->bind_status;
g_object_unref (peer);
return ret;
}
CcnetPeer *
ccnet_get_default_relay (SearpcClient *client)
{
CcnetSessionBase *base = (CcnetSessionBase *)
searpc_client_call__object(
client, "get_session_info", CCNET_TYPE_SESSION_BASE, NULL, 0);
if (!base)
return NULL;
CcnetPeer *relay = ccnet_get_peer (client, base->relay_id);
g_object_unref (base);
return relay;
}
GList *
ccnet_get_peers_by_role (SearpcClient *client, const char *role)
{
if (!role)
return NULL;
return searpc_client_call__objlist (
client, "get_peers_by_role", CCNET_TYPE_PEER, NULL,
1, "string", role);
}
char *
ccnet_get_binding_email (SearpcClient *client, const char *peer_id)
{
if (!peer_id)
return NULL;
return searpc_client_call__string (
client, "get_binding_email", NULL,
1, "string", peer_id);
}
GList *
ccnet_get_groups_by_user (SearpcClient *client, const char *user)
{
if (!user)
return NULL;
return searpc_client_call__objlist (
client, "get_groups", CCNET_TYPE_GROUP, NULL,
1, "string", user);
}
GList *
ccnet_get_group_members (SearpcClient *client, int group_id)
{
return searpc_client_call__objlist (
client, "get_group_members", CCNET_TYPE_GROUP_USER, NULL,
1, "int", group_id);
}
int
ccnet_org_user_exists (SearpcClient *client, int org_id, const char *user)
{
return searpc_client_call__int (client, "org_user_exists", NULL,
2, "int", org_id, "string", user);
}
#if 0
int
ccnet_get_peer_async (SearpcClient *client, const char *peer_id,
AsyncCallback callback, void *user_data)
{
return get_peer_async (client, peer_id, callback, user_data);
}
#endif
int
ccnet_get_binding_email_async (SearpcClient *client, const char *peer_id,
AsyncCallback callback, void *user_data)
{
return searpc_client_async_call__string (
client, "get_binding_email", callback, user_data,
1, "string", peer_id);
}
char *
ccnet_sign_message (SearpcClient *client, const char *message)
{
if (!message)
return NULL;
return searpc_client_call__string (
client, "sign_message", NULL,
1, "string", message);
}
int
ccnet_verify_message (SearpcClient *client,
const char *message,
const char *sig_base64,
const char *peer_id)
{
if (!message || !sig_base64 || !peer_id)
return -1;
return searpc_client_call__int (
client, "verify_message", NULL,
3, "string", message, "string", sig_base64, "string", peer_id);
}
char *
ccnet_pubkey_encrypt (SearpcClient *client,
const char *msg_base64,
const char *peer_id)
{
if (!msg_base64 || !peer_id)
return NULL;
return searpc_client_call__string (client, "pubkey_encrypt", NULL, 2,
"string", msg_base64, "string", peer_id);
}
char *
ccnet_privkey_decrypt (SearpcClient *client, const char *msg_base64)
{
if (!msg_base64)
return NULL;
return searpc_client_call__string (client, "privkey_decrypt", NULL, 1,
"string", msg_base64);
}
char *
ccnet_get_config (SearpcClient *client, const char *key)
{
if (!key)
return NULL;
return searpc_client_call__string (
client, "get_config", NULL,
1, "string", key);
}
int
ccnet_set_config (SearpcClient *client, const char *key, const char *value)
{
if (!key || !value)
return -1;
return searpc_client_call__int (
client, "set_config", NULL,
2, "string", key, "string", value);
}
void
ccnet_login_to_relay (SearpcClient *client, const char *relay_id,
const char *username, const char *passwd)
{
searpc_client_call__int (client, "login_relay", NULL,
3, "string", relay_id,
"string", username, "string", passwd);
}
gboolean
ccnet_peer_is_ready (SearpcClient *client, const char *peer_id)
{
CcnetPeer *peer;
gboolean ret;
peer = ccnet_get_peer (client, peer_id);
if (!peer)
return FALSE;
ret = peer->is_ready;
g_object_unref (peer);
return ret;
}
int
ccnet_update_peer_address (SearpcClient *client, const char *peer_id,
const char *addr, int port)
{
return searpc_client_call__int (
client, "update_peer_address", NULL,
3, "string", peer_id, "string", addr, "int", port);
}