Skip to content

Commit

Permalink
Refactoring.
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolasff committed Dec 31, 2010
1 parent 117fe91 commit cf2a213
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 32 deletions.
2 changes: 1 addition & 1 deletion Makefile
@@ -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
Expand Down
37 changes: 37 additions & 0 deletions formats/common.c
@@ -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);
}
}

11 changes: 11 additions & 0 deletions formats/common.h
@@ -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
26 changes: 2 additions & 24 deletions formats/json.c
@@ -1,4 +1,5 @@
#include "json.h"
#include "common.h"
#include "cmd.h"

#include <string.h>
Expand All @@ -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) {
Expand All @@ -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 *
Expand Down
9 changes: 2 additions & 7 deletions formats/raw.c
@@ -1,5 +1,6 @@
#include "raw.h"
#include "cmd.h"
#include "common.h"

#include <string.h>
#include <hiredis/hiredis.h>
Expand All @@ -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;
Expand All @@ -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);
}

Expand Down

0 comments on commit cf2a213

Please sign in to comment.