mirror of
https://github.com/haiwen/ccnet-server.git
synced 2025-05-06 22:26:21 +00:00
77 lines
2.1 KiB
C
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);
|
|
}
|