Refactoring.

master
Nicolas Favre-Felix 14 years ago
parent 117fe9119c
commit cf2a213fbc

@ -1,7 +1,7 @@
OUT=webdis
HIREDIS_OBJ=hiredis/hiredis.o hiredis/sds.o hiredis/net.o hiredis/async.o hiredis/dict.o
JANSSON_OBJ=jansson/src/dump.o jansson/src/error.o jansson/src/hashtable.o jansson/src/load.o jansson/src/strbuffer.o jansson/src/utf.o jansson/src/value.o jansson/src/variadic.o
FORMAT_OBJS=formats/json.o formats/raw.o
FORMAT_OBJS=formats/json.o formats/raw.o formats/common.o
OBJS=webdis.o conf.o $(FORMAT_OBJS) cmd.o server.o $(HIREDIS_OBJ) $(JANSSON_OBJ) libb64/cencode.o
CFLAGS=-O0 -ggdb -Wall -Wextra -I. -Ijansson/src
LDFLAGS=-levent

@ -0,0 +1,37 @@
#include "common.h"
#include "cmd.h"
#include <evhttp.h>
void
format_send_reply(struct cmd *cmd, const char *p, size_t sz, const char *content_type) {
struct evbuffer *body;
int free_cmd = 1;
/* send reply */
body = evbuffer_new();
evbuffer_add(body, p, sz);
evhttp_add_header(cmd->rq->output_headers, "Content-Type", content_type);
if(cmd_is_subscribe(cmd)) {
free_cmd = 0;
/* start streaming */
if(cmd->started_responding == 0) {
cmd->started_responding = 1;
evhttp_send_reply_start(cmd->rq, 200, "OK");
}
evhttp_send_reply_chunk(cmd->rq, body);
} else {
evhttp_send_reply(cmd->rq, 200, "OK", body);
}
/* cleanup */
evbuffer_free(body);
if(free_cmd) {
evhttp_clear_headers(&cmd->uri_params);
cmd_free(cmd);
}
}

@ -0,0 +1,11 @@
#ifndef FORMATS_COMMON_H
#define FORMATS_COMMON_H
#include <stdlib.h>
struct cmd;
void
format_send_reply(struct cmd *cmd, const char *p, size_t sz, const char *content_type);
#endif

@ -1,4 +1,5 @@
#include "json.h"
#include "common.h"
#include "cmd.h"
#include <string.h>
@ -15,12 +16,10 @@ json_wrap_redis_reply(const struct cmd *cmd, const redisReply *r);
void
json_reply(redisAsyncContext *c, void *r, void *privdata) {
struct evbuffer *body;
redisReply *reply = r;
struct cmd *cmd = privdata;
json_t *j;
char *jstr;
int free_cmd = 1;
(void)c;
if(cmd == NULL) {
@ -40,32 +39,11 @@ json_reply(redisAsyncContext *c, void *r, void *privdata) {
jstr = json_string_output(j, cmd);
/* send reply */
body = evbuffer_new();
evbuffer_add(body, jstr, strlen(jstr));
evhttp_add_header(cmd->rq->output_headers, "Content-Type", "application/json");
if(cmd_is_subscribe(cmd)) {
free_cmd = 0;
/* start streaming */
if(cmd->started_responding == 0) {
cmd->started_responding = 1;
evhttp_send_reply_start(cmd->rq, 200, "OK");
}
evhttp_send_reply_chunk(cmd->rq, body);
} else {
evhttp_send_reply(cmd->rq, 200, "OK", body);
}
format_send_reply(cmd, jstr, strlen(jstr), "application/json");
/* cleanup */
evbuffer_free(body);
json_decref(j);
free(jstr);
if(free_cmd) {
evhttp_clear_headers(&cmd->uri_params);
cmd_free(cmd);
}
}
static json_t *

@ -1,5 +1,6 @@
#include "raw.h"
#include "cmd.h"
#include "common.h"
#include <string.h>
#include <hiredis/hiredis.h>
@ -13,7 +14,6 @@ raw_wrap(const redisReply *r, size_t *sz);
void
raw_reply(redisAsyncContext *c, void *r, void *privdata) {
struct evbuffer *body;
redisReply *reply = r;
struct cmd *cmd = privdata;
char *raw_out;
@ -30,14 +30,9 @@ raw_reply(redisAsyncContext *c, void *r, void *privdata) {
raw_out = raw_wrap(r, &sz);
/* send reply */
body = evbuffer_new();
evbuffer_add(body, raw_out, sz);
evhttp_add_header(cmd->rq->output_headers, "Content-Type", "binary/octet-stream");
evhttp_send_reply(cmd->rq, 200, "OK", body);
format_send_reply(cmd, raw_out, sz, "binary/octet-stream");
/* cleanup */
evbuffer_free(body);
cmd_free(cmd);
free(raw_out);
}

Loading…
Cancel
Save