1
0
mirror of https://github.com/haiwen/ccnet-server.git synced 2025-05-06 22:26:21 +00:00
ccnet-server/lib/invoke-service-proc.c
2016-08-19 13:54:34 +08:00

77 lines
2.1 KiB
C

/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
#include "include.h"
#include "ccnet-client.h"
#include "peer.h"
#include "processor.h"
#include "invoke-service-proc.h"
static int invoke_service_start (CcnetProcessor *processor,
int argc, char **argv);
static void handle_response (CcnetProcessor *processor,
char *code, char *code_msg,
char *content, int clen);
#define GET_PRIV(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), CCNET_TYPE_SERVICE_PROC, CcnetServiceProcPriv))
G_DEFINE_TYPE (CcnetServiceProc, ccnet_service_proc, CCNET_TYPE_PROCESSOR)
static void
ccnet_service_proc_class_init (CcnetServiceProcClass *klass)
{
CcnetProcessorClass *proc_class = CCNET_PROCESSOR_CLASS (klass);
proc_class->start = invoke_service_start;
proc_class->handle_response = handle_response;
}
static void
ccnet_service_proc_init (CcnetServiceProc *processor)
{
/* CCNET_PROCESSOR (processor)->state = INIT; */
}
static int invoke_service_start (CcnetProcessor *processor,
int argc, char **argv)
{
char *cmd;
if (argc == 0) {
g_warning ("Invalid argument for service-proc\n");
ccnet_processor_done (processor, FALSE);
}
cmd = ccnet_util_strjoin_n (" ", argc, argv);
ccnet_client_send_request (processor->session,
REQUEST_ID (processor->id), cmd);
return 0;
}
void
ccnet_service_proc_set_response_cb (CcnetServiceProc *proc,
ResponseCB resp_cb, void *data)
{
proc->resp_cb = resp_cb;
proc->cb_data = data;
}
static void handle_response (CcnetProcessor *processor,
char *code, char *code_msg,
char *content, int clen)
{
CcnetServiceProc *proc = (CcnetServiceProc *) processor;
if (proc->resp_cb)
proc->resp_cb (code, code_msg, content, clen, proc->cb_data);
if (code[0] == '4' || code[0] == '5')
ccnet_processor_done (processor, FALSE);
}