/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
/**
 * Copyright (c) 2015 Regents of the University of California
 *
 * This file is part of NFD (Named Data Networking Forwarding Daemon) Android.
 * See AUTHORS.md for complete list of NFD Android authors and contributors.
 *
 * NFD Android is free software: you can redistribute it and/or modify it under the terms
 * of the GNU General Public License as published by the Free Software Foundation,
 * either version 3 of the License, or (at your option) any later version.
 *
 * NFD Android is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
 * PURPOSE.  See the GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with
 * NFD Android, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
 */

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class net_named_data_nfd_service_NfdService */

#ifndef _Included_net_named_data_nfd_service_NfdService
#define _Included_net_named_data_nfd_service_NfdService
#ifdef __cplusplus
extern "C" {
#endif

/*
 * Class:     net_named_data_nfd_service_NfdService
 * Method:    startNfd
 * Signature: (Ljava/lang/Map;)V
 */
JNIEXPORT void JNICALL
Java_net_named_1data_nfd_service_NfdService_startNfd(JNIEnv*, jclass, jobject);

/*
 * Class:     net_named_data_nfd_service_NfdService
 * Method:    stopNfd
 * Signature: ()V
 */
JNIEXPORT void JNICALL
Java_net_named_1data_nfd_service_NfdService_stopNfd(JNIEnv*, jclass);

/*
 * Class:     net_named_data_nfd_service_NfdService
 * Method:    getNfdLogModules
 * Signature: ()Ljava/util/List;
 */
JNIEXPORT jobject JNICALL
Java_net_named_1data_nfd_service_NfdService_getNfdLogModules(JNIEnv*, jclass);

#ifdef __cplusplus
}
#endif
#endif
