mirror of
https://github.com/haiwen/ccnet-server.git
synced 2025-09-09 08:39:12 +00:00
Initial commit of Ccnet server.
This commit is contained in:
83
net/common/processors/rcvmsg-proc.c
Normal file
83
net/common/processors/rcvmsg-proc.c
Normal file
@@ -0,0 +1,83 @@
|
||||
/* -*- 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);
|
||||
}
|
Reference in New Issue
Block a user