/*
 *
 *  ConnMan VPN daemon
 *
 *  Copyright (C) 2012  Intel Corporation. All rights reserved.
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  This program 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 this program; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 */

#ifndef __VPN_AGENT_H
#define __VPN_AGENT_H

#ifdef __cplusplus
extern "C" {
#endif

/**
 * SECTION:agent
 * @title: Agent premitives
 * @short_description: Functions for interaction with agent
 */

void vpn_agent_append_host_and_name(DBusMessageIter *iter,
				struct vpn_provider *provider);
connman_bool_t vpn_agent_check_reply_has_dict(DBusMessage *reply);
void vpn_agent_append_user_info(DBusMessageIter *iter,
				struct vpn_provider *provider,
				const char *username_str);

#ifdef __cplusplus
}
#endif

#endif /* __VPN_AGENT_H */
