Example #1
0
void WebController::ListDir(struct json_token *paramtoken){
    char *dir = NULL;
    toks(paramtoken, &dir, 0);
    if (dir) {
      DIR *dp;
      struct dirent *ep;
      int w = 0,first=1;
      dp = opendir (dir);
      if (dp != NULL){
          w += snprintf(gp_response+w, MAX_LINE-w, "[");
          while ((ep = readdir(dp))){
            //printf("%d %s\n", ep->d_type, ep->d_name);
            if(first){
              first = 0;
              w += json_emit(gp_response+w, MAX_LINE-w, "{s: s, s: i}", "name", ep->d_name,"type",ep->d_type );
            } else {
              w += json_emit(gp_response+w, MAX_LINE-w, ",{s: s, s: i}", "name", ep->d_name,"type",ep->d_type );
            }
          }
          w += snprintf(gp_response+w, MAX_LINE-w, "]");
          (void) closedir (dp);
      } else {
        this->DoErrorMessage(strerror(errno));
      }
    }
    free(dir);
}
Example #2
0
/*
 * Create JSON-RPC request in a given buffer.
 *
 * Return length of the request, which
 * can be larger then `len` that indicates an overflow.
 */
int ns_rpc_create_request(char *buf, int len, const char *method,
                          const char *id, const char *params_fmt, ...) {
  va_list ap;
  int n = 0;

  n += json_emit(buf + n, len - n, "{s:s,s:s,s:s,s:", "jsonrpc", "2.0", "id",
                 id, "method", method, "params");
  va_start(ap, params_fmt);
  n += json_emit_va(buf + n, len - n, params_fmt, ap);
  va_end(ap);

  n += json_emit(buf + n, len - n, "}");

  return n;
}
Example #3
0
static
int settings_save() {
	FILE* fp;
	size_t len;
	char settings_buf[256];
	char effects_buf[MAX_EFFECTS * 512];

	len = settings_json(settings_buf, sizeof(settings_buf));
	LOG(("settings_json: %zu bytes\n", len));
	len = effects_json(effects_buf, sizeof(effects_buf));
	LOG(("effects_json: %zu bytes\n", len));

	len = json_emit(work_buf, sizeof(work_buf), JSON_DOC,
		SETTINGS, settings_buf,
		EFFECTS, effects_buf
	);

	fp = fopen(SETTINGS_FILE, "w");
	if (!fp) {
		LOG(("settings_save> fopen() failed: (%d) %s\n", errno, strerror(errno)));
		return errno;
	}

	fwrite(work_buf, len, 1, fp);

	fclose(fp);
	return 0;
}
Example #4
0
/*
 * Create JSON-RPC error reply in a given buffer.
 *
 * Return length of the error, which
 * can be larger then `len` that indicates an overflow.
 */
int ns_rpc_create_error(char *buf, int len, struct ns_rpc_request *req,
                        int code, const char *message, const char *fmt, ...) {
  va_list ap;
  int n = 0;

  n += json_emit(buf + n, len - n, "{s:s,s:V,s:{s:i,s:s,s:", "jsonrpc", "2.0",
                 "id", req->id == NULL ? "null" : req->id->ptr,
                 req->id == NULL ? 4 : req->id->len, "error", "code", code,
                 "message", message, "data");
  va_start(ap, fmt);
  n += json_emit_va(buf + n, len - n, fmt, ap);
  va_end(ap);

  n += json_emit(buf + n, len - n, "}}");

  return n;
}
Example #5
0
int ns_rpc_create_reply(char *buf, int len, const struct ns_rpc_request *req,
                        const char *result_fmt, ...) {
  va_list ap;
  int n = 0;

  n += json_emit(buf + n, len - n, "{s:s,s:V,s:",
                 "jsonrpc", "2.0", "id",
                 req->id == NULL ? "null" : req->id->ptr,
                 req->id == NULL ? 4 : req->id->len,
                 "result");
  va_start(ap, result_fmt);
  n += json_emit_va(buf + n, len - n, result_fmt, ap);
  va_end(ap);

  n += json_emit(buf + n, len - n, "}");

  return n;
}
Example #6
0
static 
int channel_json(char* buf, size_t len, struct channel* channel) {
	int i;
	int ret;
	int first = 1;
	char all_buf[MAX_EFFECTS * 512];
	char* ptr = all_buf;

	*ptr = 0;

	// LOG(("channel_json> %p\n", channel));

	for (i = 0; i < channel->num_effects; i++) {
		struct effect* effect = channel->effects[i];
		char color_buf[1024];
		char effect_buf[1024];
	
		// LOG(("channel_json> effect: %s\n", effect->name));

		color_json(color_buf, sizeof(color_buf), channel, &effect->color_arg);

		json_emit(effect_buf, sizeof(effect_buf), JSON_EFFECT,
			NAME,          effect->name,
			ARGUMENT,      effect->argument,
			ARGUMENT_DESC, effect->arg_desc ? effect->arg_desc : "",
			COLOR,         color_buf,
			IS_SSAVER,     effect->screen_saver
		);

		if (first) {
			first = 0;
			ret = sprintf(ptr, "%s", effect_buf);
		} else {
			ret = sprintf(ptr, ",\n%s", effect_buf);
		}

		ptr += ret;
	}

	return json_emit(buf, len, JSON_CHANNEL,
		ACTIVE, channel->active,
		ALL,    all_buf
	);
}
Example #7
0
int WebController::CreateMcodeUserCallbackData(int mCode, bool blocking, char *buf, size_t buf_len){
  int id = callback_counter++;
  json_emit(buf, buf_len,"{ s: i, s: { s: S, s: s, s: i }}",
      "id", id,
      "payload",
      "block",blocking?"true":"false",
      "type", CB_NAMES[CB_USER_M_CODE],
      "code", mCode);
  return id;
}
Example #8
0
int WebController::CreateErrorMessageCallbackData(const char *msg, bool blocking, char *buf, size_t buf_len) {
  int id = callback_counter++;
  json_emit(buf, buf_len, "{ s: i, s: { s: S, s: s, s: s }}",
      "id", id,
      "payload",
      "block",blocking?"true":"false",
      "type", CB_NAMES[CB_ERR_MSG],
      "message", msg);
  return id;
}
Example #9
0
int WebController::CreateStatusCallbackData(int line_no, const char *msg, bool blocking, char *buf, size_t buf_len){
  int id = callback_counter++;
  json_emit(buf, buf_len, "{ s: i, s: { s: S, s: s, s: i, s: s }}",
      "id", id,
      "payload",
      "block", blocking?"true":"false",
      "type", CB_NAMES[CB_STATUS],
      "line", line_no,
      "message", msg);
  return id;
}
Example #10
0
static
int settings_json(char* buf, size_t len) {
	return json_emit(buf, len, JSON_SETTINGS, 
		BRIGHTNESS,          settings.brightness, 
		MANUAL_TICK,         settings.manual_tick, 
		IDLE_INTERVAL,       settings.idle_interval,
		MANUAL_TOGGLE,       settings.manual_toggle,
		SCREEN_SAVER_TOGGLE, settings.screen_saver_toggle,
		ALPHA,               settings.alpha
	);
}
Example #11
0
int WebController::CreateMessageBoxCallbackData(const char *title, const char *msg, int options, bool blocking, char *buf, size_t buf_len) {
  int id = callback_counter++;
  json_emit(buf, buf_len, "{ s: i, s: { s: S, s: s, s: i, s: s, s: s }}",
      "id", id,
      "payload",
      "block",blocking?"true":"false",
      "type", CB_NAMES[CB_MESSAGEBOX],
      "options", options,
      "title", title,
      "message", msg);
  return id;
}
Example #12
0
int WebController::CreateCompleteCallbackData(int status, int line_no, int sequence_number,const char *err, bool blocking, char *buf, size_t buf_len){
  int id = callback_counter++;
  json_emit(buf, buf_len, "{ s: i, s: { s: S, s: s, s: i, s: i, s: i, s: s }}",
      "id", id,
      "payload",
      "block",blocking?"true":"false",
      "type", CB_NAMES[CB_COMPLETE],
      "line", line_no,
      "status", status,
      "sequence", sequence_number,
      "message", err);
  return id;

}
Example #13
0
/*
 * Create JSON-RPC reply in a given buffer.
 *
 * Return length of the reply, which
 * can be larger then `len` that indicates an overflow.
 */
int ns_rpc_create_reply(char *buf, int len, const struct ns_rpc_request *req,
                        const char *result_fmt, ...) {
  static const struct json_token null_tok = {"null", 4, 0, JSON_TYPE_NULL};
  const struct json_token *id = req->id == NULL ? &null_tok : req->id;
  va_list ap;
  int n = 0;

  n += json_emit(buf + n, len - n, "{s:s,s:", "jsonrpc", "2.0", "id");
  if (id->type == JSON_TYPE_STRING) {
    n += json_emit_quoted_str(buf + n, len - n, id->ptr, id->len);
  } else {
    n += json_emit_unquoted_str(buf + n, len - n, id->ptr, id->len);
  }
  n += json_emit(buf + n, len - n, ",s:", "result");

  va_start(ap, result_fmt);
  n += json_emit_va(buf + n, len - n, result_fmt, ap);
  va_end(ap);

  n += json_emit(buf + n, len - n, "}");

  return n;
}
Example #14
0
static
int effects_json(char* buf, size_t len) {
	char treads_buf[MAX_EFFECTS * 512];
	char panels_buf[MAX_EFFECTS * 512];
	char barrel_buf[MAX_EFFECTS * 512];

	channel_json(treads_buf, sizeof(treads_buf), &channel_treads);
	channel_json(panels_buf, sizeof(panels_buf), &channel_panels);
	channel_json(barrel_buf, sizeof(barrel_buf), &channel_barrel);

	return json_emit(buf, len, JSON_EFFECTS,
		TREADS, treads_buf,
		PANELS, panels_buf,
		BARREL, barrel_buf
	);
}
Example #15
0
static
int color_json(char* buf, size_t len, struct channel* channel, union color_arg* arg) {
	if (channel == &channel_panels) {
		union color* values = arg->colors;
		return json_emit(buf, len, JSON_PANELS_COLOR,
			values[0].value,
			values[1].value,
			values[2].value,
			values[3].value,
			values[4].value,
			values[5].value,
			values[6].value,
			values[7].value,
			values[8].value,
			values[9].value
		);
	} 
	return json_emit_long(buf, len, arg->color.value);
}
Example #16
0
static PyObject *
PongoDict_json(PongoDict *self, PyObject *args)
{
    char *key = NULL, *val = NULL;
    Py_ssize_t klen, vlen;
    PyObject *ret = Py_None;
    dbtype_t dict, obj, k;
    jsonctx_t *jctx;

    if (!PyArg_ParseTuple(args, "|s#s#:json", &key, &klen, &val, &vlen))
        return NULL;

    dblock(self->ctx);
    dict = self->dbptr;
    jctx = json_init(self->ctx);
    if (key) {
        if (val) {
            // 2-arg form is dict.json('key', 'value')
            // inserts dict['key'] = json_parse('value')
            k = dbstring_new(self->ctx, key, klen);
            obj = json_parse(jctx, val, vlen);
            dbobject_setitem(SELF_CTX_AND_DBPTR, k, obj, self->ctx->sync);
        } else {
            // 1-arg form is replace dict.items with parsed json
            obj = json_parse(jctx, key, klen);
            dict.ptr = dbptr(self->ctx, dict);
            obj.ptr = dbptr(self->ctx, obj);
            dict.ptr->obj = obj.ptr->obj;
        }
        Py_INCREF(ret);
    } else {
        // The 0-arg form is to generate the json string from dictionary
        // contents
        json_emit(jctx, dict);
        if (jctx->outstr)
            ret = PyUnicode_FromStringAndSize(
                (const char*)jctx->outstr, jctx->outlen);
    }
    json_cleanup(jctx);
    dbunlock(self->ctx);
    return ret;
}