/*
 * Copyright (C) 2014 the contributors as stated in the AUTHORS file
 *
 * This file is part of open62541. open62541 is free software: you can
 * redistribute it and/or modify it under the terms of the GNU Lesser General
 * Public License, version 3 (as published by the Free Software Foundation) with
 * a static linking exception as stated in the LICENSE file provided with
 * open62541.
 *
 * open62541 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 Lesser General Public License for more
 * details.
 */

#ifndef UA_SERVER_H_
#define UA_SERVER_H_

#ifdef __cplusplus
extern "C" {
#endif

#include "ua_types.h"
#include "ua_types_generated.h"
#include "ua_connection.h"
#include "ua_log.h"

/** @defgroup server Server */

struct UA_SecureChannelManager;
typedef struct UA_SecureChannelManager UA_SecureChannelManager;

struct UA_SessionManager;
typedef struct UA_SessionManager UA_SessionManager;

struct UA_NodeStore;
typedef struct UA_NodeStore UA_NodeStore;

typedef struct UA_Server {
    UA_ApplicationDescription description;
    UA_SecureChannelManager *secureChannelManager;
    UA_SessionManager *sessionManager;
    UA_NodeStore *nodestore;
    UA_Logger logger;
    UA_ByteString serverCertificate;
} UA_Server;

void UA_LIBEXPORT UA_Server_init(UA_Server *server, UA_String *endpointUrl);
UA_Int32 UA_LIBEXPORT UA_Server_deleteMembers(UA_Server *server);
UA_Int32 UA_LIBEXPORT UA_Server_processBinaryMessage(UA_Server *server, UA_Connection *connection, const UA_ByteString *msg);

#ifdef __cplusplus
} // extern "C"
#endif

#endif /* UA_SERVER_H_ */