示例#1
0
static ERL_NIF_TERM nif_get_part(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) {

  gchar *path = get_char_argument(env, &argv[0]);
  if (!path)
    return enif_make_badarg(env);

  int part_id;
  if(!enif_get_int(env, argv[1], &part_id)){
    g_free(path);
    return enif_make_badarg(env);
  }

  GByteArray *attachment = gmimex_get_part(path, part_id);
  g_free(path);

  if (!attachment)
    return enif_make_badarg(env);

  ErlNifBinary result_binary = {0};
  enif_alloc_binary(attachment->len, &result_binary);
  (void)memcpy(result_binary.data, attachment->data, attachment->len);
  g_byte_array_free(attachment, TRUE);

  return enif_make_binary(env, &result_binary);
}
示例#2
0
文件: port.c 项目: migadu/gmimex
int main(void) {
    int bytes_read;
    gchar buffer[MAX_BUFFER_SIZE];
    JSON_Value *root_value;
    JSON_Object *root_object;
    gchar *json_str;
    gchar *func_name;
    gchar *path;

    while((bytes_read = read_msg(buffer)) > 0) {
    	json_str = g_strndup((const gchar *)buffer, bytes_read);
    	root_value = json_parse_string(json_str);
    	root_object = json_value_get_object(root_value);
    	func_name = (gchar *)json_object_get_string(root_object, "exec");
    	path = (gchar *)json_object_get_string(root_object, "path");
			GString *json_message = NULL;

    	if (!g_ascii_strcasecmp(func_name, "get_preview_json")) {
				json_message = gmimex_get_json(path, JSON_NO_MESSAGE_CONTENT);
  			if (!json_message) {
  				send_err();
  			} else {
					send_msg((gchar *)json_message->str, json_message->len);
			  	g_string_free(json_message, TRUE);
			  }
    	} else if (!g_ascii_strcasecmp(func_name, "get_json")) {
  			gboolean raw = json_object_get_boolean(root_object, "raw");
  			json_message = gmimex_get_json(path, (raw ? JSON_RAW_MESSAGE_CONTENT : JSON_PREPARED_MESSAGE_CONTENT));
  			if (!json_message) {
  				send_err();
  			} else {
					send_msg((gchar *)json_message->str, json_message->len);
			  	g_string_free(json_message, TRUE);
			  }
    	} else if (!g_ascii_strcasecmp(func_name, "get_part")) {
    		int part_id = json_object_get_number(root_object, "partId");
			  GByteArray *part_content = gmimex_get_part(path, part_id);
			  if (!part_content) {
			  	send_err();
			  } else {
    			send_msg((gchar *)part_content->data, part_content->len);
    			g_byte_array_free(part_content, TRUE);
    		}
    	}
    	json_value_free(root_value);
    	g_free(json_str);
    }
    return 0;
}