1
0
mirror of https://github.com/haiwen/ccnet-server.git synced 2025-06-12 15:14:41 +00:00
ccnet-server/net/common/processors/rcvmsg-proc.c
2016-08-19 13:54:34 +08:00

84 lines
2.4 KiB
C

/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
#include "common.h"
#include "peer.h"
#include "message.h"
#include "session.h"
#include "message-manager.h"
#include "peer-mgr.h"
#include "rcvmsg-proc.h"
#include "algorithms.h"
#define DEBUG_FLAG CCNET_DEBUG_MESSAGE
#include "log.h"
static int rcv_msg_start (CcnetProcessor *processor, int argc, char **argv);
static void handle_update (CcnetProcessor *processor,
char *code, char *code_msg,
char *content, int clen);
G_DEFINE_TYPE (CcnetRcvmsgProc, ccnet_rcvmsg_proc, CCNET_TYPE_PROCESSOR)
static void
ccnet_rcvmsg_proc_class_init (CcnetRcvmsgProcClass *klass)
{
CcnetProcessorClass *proc_class = CCNET_PROCESSOR_CLASS (klass);
proc_class->name = "rcvmsg-proc";
proc_class->start = rcv_msg_start;
proc_class->handle_update = handle_update;
}
static void
ccnet_rcvmsg_proc_init (CcnetRcvmsgProc *processor)
{
}
static int rcv_msg_start (CcnetProcessor *processor, int argc, char **argv)
{
ccnet_processor_send_response (processor, "200", "OK", NULL, 0);
return 0;
}
static void handle_update (CcnetProcessor *processor,
char *code, char *code_msg,
char *content, int clen)
{
CcnetMessage *msg;
if (processor->peer->is_local) {
msg = ccnet_message_from_string_local (content, clen);
ccnet_send_message (processor->session, msg);
ccnet_message_unref (msg);
} else {
msg = ccnet_message_from_string (content, clen);
if (!msg) {
g_warning ("Wrong message format.\n");
ccnet_processor_done (processor, FALSE);
return;
}
msg->rtime = time(NULL);
ccnet_debug ("[msg] Received a message : %s - %.10s\n",
msg->app, msg->body);
int ret = ccnet_recv_message (processor->session, msg);
if (ret == -1) {
ccnet_message ("[msg] Message from %.8s permission error\n",
msg->from);
ccnet_processor_send_response (processor, SC_PERM_ERR,
SS_PERM_ERR, NULL, 0);
ccnet_processor_done (processor, TRUE);
ccnet_message_unref (msg);
return;
}
ccnet_message_unref (msg);
}
ccnet_processor_send_response (processor, "200", "OK", NULL, 0);
ccnet_processor_done (processor, TRUE);
}