libimcv: Moved REST API from imv_swid and imv_swima to libimcv
This commit is contained in:
+4
-1
@@ -1003,7 +1003,7 @@ if test x$tss_tss2 = xtrue; then
|
|||||||
AC_SUBST(tss2_LIBS)
|
AC_SUBST(tss2_LIBS)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test x$imv_swid = xtrue -o x$imv_swima = xtrue; then
|
if test x$imc_swima = xtrue -o $imv_swima = xtrue -o x$imv_swid = xtrue; then
|
||||||
PKG_CHECK_MODULES(json, [json-c], [],
|
PKG_CHECK_MODULES(json, [json-c], [],
|
||||||
[PKG_CHECK_MODULES(json, [json])])
|
[PKG_CHECK_MODULES(json, [json])])
|
||||||
AC_SUBST(json_CFLAGS)
|
AC_SUBST(json_CFLAGS)
|
||||||
@@ -1711,6 +1711,9 @@ fi
|
|||||||
if test x$fuzzing = xtrue; then
|
if test x$fuzzing = xtrue; then
|
||||||
AC_DEFINE([USE_FUZZING], [], [build code for fuzzing])
|
AC_DEFINE([USE_FUZZING], [], [build code for fuzzing])
|
||||||
fi
|
fi
|
||||||
|
if test x$imc_swima = xtrue -o x$imv_swima = xtrue -o x$imv_swid = xtrue ; then
|
||||||
|
AC_DEFINE([USE_JSON], [], [build code for JSON])
|
||||||
|
fi
|
||||||
|
|
||||||
# ====================================================
|
# ====================================================
|
||||||
# options for enabled modules (see conf/Makefile.am)
|
# options for enabled modules (see conf/Makefile.am)
|
||||||
|
|||||||
@@ -5,6 +5,9 @@ AM_CPPFLAGS = \
|
|||||||
-DIPSEC_SCRIPT=\"${ipsec_script}\" \
|
-DIPSEC_SCRIPT=\"${ipsec_script}\" \
|
||||||
-DSWID_DIRECTORY=\"${prefix}/share\"
|
-DSWID_DIRECTORY=\"${prefix}/share\"
|
||||||
|
|
||||||
|
AM_CFLAGS = \
|
||||||
|
$(json_CFLAGS)
|
||||||
|
|
||||||
ipseclib_LTLIBRARIES = libimcv.la
|
ipseclib_LTLIBRARIES = libimcv.la
|
||||||
|
|
||||||
libimcv_la_LDFLAGS = \
|
libimcv_la_LDFLAGS = \
|
||||||
@@ -13,7 +16,8 @@ libimcv_la_LDFLAGS = \
|
|||||||
libimcv_la_LIBADD = \
|
libimcv_la_LIBADD = \
|
||||||
$(top_builddir)/src/libstrongswan/libstrongswan.la \
|
$(top_builddir)/src/libstrongswan/libstrongswan.la \
|
||||||
$(top_builddir)/src/libtncif/libtncif.la \
|
$(top_builddir)/src/libtncif/libtncif.la \
|
||||||
$(top_builddir)/src/libtpmtss/libtpmtss.la
|
$(top_builddir)/src/libtpmtss/libtpmtss.la \
|
||||||
|
$(json_LIBS)
|
||||||
|
|
||||||
if USE_WINDOWS
|
if USE_WINDOWS
|
||||||
libimcv_la_LIBADD += -lws2_32
|
libimcv_la_LIBADD += -lws2_32
|
||||||
@@ -88,6 +92,7 @@ libimcv_la_SOURCES = \
|
|||||||
pts/components/tcg/tcg_comp_func_name.h pts/components/tcg/tcg_comp_func_name.c \
|
pts/components/tcg/tcg_comp_func_name.h pts/components/tcg/tcg_comp_func_name.c \
|
||||||
pwg/pwg_attr.h pwg/pwg_attr.c \
|
pwg/pwg_attr.h pwg/pwg_attr.c \
|
||||||
pwg/pwg_attr_vendor_smi_code.h pwg/pwg_attr_vendor_smi_code.c \
|
pwg/pwg_attr_vendor_smi_code.h pwg/pwg_attr_vendor_smi_code.c \
|
||||||
|
rest/rest.h rest/rest.c \
|
||||||
seg/seg_contract.h seg/seg_contract.c \
|
seg/seg_contract.h seg/seg_contract.c \
|
||||||
seg/seg_contract_manager.h seg/seg_contract_manager.c \
|
seg/seg_contract_manager.h seg/seg_contract_manager.c \
|
||||||
seg/seg_env.h seg/seg_env.c \
|
seg/seg_env.h seg/seg_env.c \
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ imv_swid_la_LIBADD = \
|
|||||||
|
|
||||||
imv_swid_la_SOURCES = \
|
imv_swid_la_SOURCES = \
|
||||||
imv_swid.c imv_swid_state.h imv_swid_state.c \
|
imv_swid.c imv_swid_state.h imv_swid_state.c \
|
||||||
imv_swid_agent.h imv_swid_agent.c \
|
imv_swid_agent.h imv_swid_agent.c
|
||||||
imv_swid_rest.h imv_swid_rest.c
|
|
||||||
|
|
||||||
imv_swid_la_LDFLAGS = -module -avoid-version -no-undefined
|
imv_swid_la_LDFLAGS = -module -avoid-version -no-undefined
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2013-2016 Andreas Steffen
|
* Copyright (C) 2013-2017 Andreas Steffen
|
||||||
* HSR Hochschule fuer Technik Rapperswil
|
* HSR Hochschule fuer Technik Rapperswil
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
@@ -18,12 +18,12 @@
|
|||||||
|
|
||||||
#include "imv_swid_agent.h"
|
#include "imv_swid_agent.h"
|
||||||
#include "imv_swid_state.h"
|
#include "imv_swid_state.h"
|
||||||
#include "imv_swid_rest.h"
|
|
||||||
|
|
||||||
#include <imcv.h>
|
#include <imcv.h>
|
||||||
#include <imv/imv_agent.h>
|
#include <imv/imv_agent.h>
|
||||||
#include <imv/imv_msg.h>
|
#include <imv/imv_msg.h>
|
||||||
#include <ietf/ietf_attr_pa_tnc_error.h>
|
#include <ietf/ietf_attr_pa_tnc_error.h>
|
||||||
|
#include "rest/rest.h"
|
||||||
#include "tcg/seg/tcg_seg_attr_max_size.h"
|
#include "tcg/seg/tcg_seg_attr_max_size.h"
|
||||||
#include "tcg/seg/tcg_seg_attr_seg_env.h"
|
#include "tcg/seg/tcg_seg_attr_seg_env.h"
|
||||||
#include "tcg/swid/tcg_swid_attr_req.h"
|
#include "tcg/swid/tcg_swid_attr_req.h"
|
||||||
@@ -72,7 +72,7 @@ struct private_imv_swid_agent_t {
|
|||||||
/**
|
/**
|
||||||
* REST API to strongTNC manager
|
* REST API to strongTNC manager
|
||||||
*/
|
*/
|
||||||
imv_swid_rest_t *rest_api;
|
rest_t *rest_api;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -719,7 +719,7 @@ imv_agent_if_t *imv_swid_agent_create(const char *name, TNC_IMVID id,
|
|||||||
"%s.plugins.imv-swid.rest_api_timeout", 120, lib->ns);
|
"%s.plugins.imv-swid.rest_api_timeout", 120, lib->ns);
|
||||||
if (rest_api_uri)
|
if (rest_api_uri)
|
||||||
{
|
{
|
||||||
this->rest_api = imv_swid_rest_create(rest_api_uri, rest_api_timeout);
|
this->rest_api = rest_create(rest_api_uri, rest_api_timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
return &this->public;
|
return &this->public;
|
||||||
|
|||||||
@@ -1,124 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2014 Andreas Steffen
|
|
||||||
* HSR Hochschule fuer Technik Rapperswil
|
|
||||||
*
|
|
||||||
* This program 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 2 of the License, or (at your
|
|
||||||
* option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
|
|
||||||
*
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define _GNU_SOURCE
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "imv_swid_rest.h"
|
|
||||||
|
|
||||||
typedef struct private_imv_swid_rest_t private_imv_swid_rest_t;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Private data of an imv_swid_rest_t object.
|
|
||||||
*/
|
|
||||||
struct private_imv_swid_rest_t {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Public members of imv_swid_rest_t
|
|
||||||
*/
|
|
||||||
imv_swid_rest_t public;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* URI of REST API
|
|
||||||
*/
|
|
||||||
char *uri;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Timeout of REST API connection
|
|
||||||
*/
|
|
||||||
u_int timeout;
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#define HTTP_STATUS_CODE_PRECONDITION_FAILED 412
|
|
||||||
|
|
||||||
METHOD(imv_swid_rest_t, post, status_t,
|
|
||||||
private_imv_swid_rest_t *this, char *command, json_object *jrequest,
|
|
||||||
json_object **jresponse)
|
|
||||||
{
|
|
||||||
struct json_tokener *tokener;
|
|
||||||
chunk_t data, response = chunk_empty;
|
|
||||||
status_t status;
|
|
||||||
char *uri;
|
|
||||||
int code;
|
|
||||||
|
|
||||||
if (asprintf(&uri, "%s%s",this->uri, command) < 0)
|
|
||||||
{
|
|
||||||
return FAILED;
|
|
||||||
}
|
|
||||||
data = chunk_from_str((char*)json_object_to_json_string(jrequest));
|
|
||||||
|
|
||||||
status = lib->fetcher->fetch(lib->fetcher, uri, &response,
|
|
||||||
FETCH_TIMEOUT, this->timeout,
|
|
||||||
FETCH_REQUEST_DATA, data,
|
|
||||||
FETCH_REQUEST_TYPE, "application/json; charset=utf-8",
|
|
||||||
FETCH_REQUEST_HEADER, "Accept: application/json",
|
|
||||||
FETCH_REQUEST_HEADER, "Expect:",
|
|
||||||
FETCH_RESPONSE_CODE, &code,
|
|
||||||
FETCH_END);
|
|
||||||
free(uri);
|
|
||||||
|
|
||||||
if (status != SUCCESS)
|
|
||||||
{
|
|
||||||
if (code != HTTP_STATUS_CODE_PRECONDITION_FAILED || !response.ptr)
|
|
||||||
{
|
|
||||||
DBG2(DBG_IMV, "REST http request failed with status code: %d", code);
|
|
||||||
status = FAILED;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (jresponse)
|
|
||||||
{
|
|
||||||
/* Parse HTTP response into a JSON object */
|
|
||||||
tokener = json_tokener_new();
|
|
||||||
*jresponse = json_tokener_parse_ex(tokener, response.ptr,
|
|
||||||
response.len);
|
|
||||||
json_tokener_free(tokener);
|
|
||||||
}
|
|
||||||
status = NEED_MORE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
free(response.ptr);
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
METHOD(imv_swid_rest_t, destroy, void,
|
|
||||||
private_imv_swid_rest_t *this)
|
|
||||||
{
|
|
||||||
free(this->uri);
|
|
||||||
free(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Described in header.
|
|
||||||
*/
|
|
||||||
imv_swid_rest_t *imv_swid_rest_create(char *uri, u_int timeout)
|
|
||||||
{
|
|
||||||
private_imv_swid_rest_t *this;
|
|
||||||
|
|
||||||
INIT(this,
|
|
||||||
.public = {
|
|
||||||
.post = _post,
|
|
||||||
.destroy = _destroy,
|
|
||||||
},
|
|
||||||
.uri = strdup(uri),
|
|
||||||
.timeout = timeout,
|
|
||||||
);
|
|
||||||
|
|
||||||
return &this->public;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,63 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (C) 2013-2014 Andreas Steffen
|
|
||||||
* HSR Hochschule fuer Technik Rapperswil
|
|
||||||
*
|
|
||||||
* This program 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 2 of the License, or (at your
|
|
||||||
* option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
|
|
||||||
*
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @defgroup imv_swid imv_swid
|
|
||||||
* @ingroup libimcv_plugins
|
|
||||||
*
|
|
||||||
* @defgroup imv_swid_rest_t imv_swid_rest
|
|
||||||
* @{ @ingroup imv_swid
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef IMV_SWID_REST_H_
|
|
||||||
#define IMV_SWID_REST_H_
|
|
||||||
|
|
||||||
#include <library.h>
|
|
||||||
|
|
||||||
#include <json.h>
|
|
||||||
|
|
||||||
typedef struct imv_swid_rest_t imv_swid_rest_t;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Public REST interface
|
|
||||||
*/
|
|
||||||
struct imv_swid_rest_t {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Post a HTTP request including a JSON object
|
|
||||||
*
|
|
||||||
* @param jreq JSON object in HTTP request
|
|
||||||
* @param jresp JSON object in HTTP response if NEED_MORE
|
|
||||||
* @return Status (SUCCESS, NEED_MORE or FAILED)
|
|
||||||
*/
|
|
||||||
status_t (*post)(imv_swid_rest_t *this, char *command, json_object *jreq,
|
|
||||||
json_object **jresp);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Destroy imv_swid_rest_t object
|
|
||||||
*/
|
|
||||||
void (*destroy)(imv_swid_rest_t *this);
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Create an imv_swid_rest_t instance
|
|
||||||
*
|
|
||||||
* @param uri REST URI (http://username:password@hostname[:port]/api/)
|
|
||||||
* @param timeout Timeout of the REST connection
|
|
||||||
*/
|
|
||||||
imv_swid_rest_t* imv_swid_rest_create(char *uri, u_int timeout);
|
|
||||||
|
|
||||||
#endif /** IMV_SWID_REST_H_ @}*/
|
|
||||||
@@ -16,7 +16,6 @@ imv_swima_la_LIBADD = \
|
|||||||
|
|
||||||
imv_swima_la_SOURCES = \
|
imv_swima_la_SOURCES = \
|
||||||
imv_swima.c imv_swima_state.h imv_swima_state.c \
|
imv_swima.c imv_swima_state.h imv_swima_state.c \
|
||||||
imv_swima_agent.h imv_swima_agent.c \
|
imv_swima_agent.h imv_swima_agent.c
|
||||||
imv_swima_rest.h imv_swima_rest.c
|
|
||||||
|
|
||||||
imv_swima_la_LDFLAGS = -module -avoid-version -no-undefined
|
imv_swima_la_LDFLAGS = -module -avoid-version -no-undefined
|
||||||
|
|||||||
@@ -18,11 +18,11 @@
|
|||||||
|
|
||||||
#include "imv_swima_agent.h"
|
#include "imv_swima_agent.h"
|
||||||
#include "imv_swima_state.h"
|
#include "imv_swima_state.h"
|
||||||
#include "imv_swima_rest.h"
|
|
||||||
|
|
||||||
#include <imcv.h>
|
#include <imcv.h>
|
||||||
#include <imv/imv_agent.h>
|
#include <imv/imv_agent.h>
|
||||||
#include <imv/imv_msg.h>
|
#include <imv/imv_msg.h>
|
||||||
|
#include "rest/rest.h"
|
||||||
#include "tcg/seg/tcg_seg_attr_max_size.h"
|
#include "tcg/seg/tcg_seg_attr_max_size.h"
|
||||||
#include "tcg/seg/tcg_seg_attr_seg_env.h"
|
#include "tcg/seg/tcg_seg_attr_seg_env.h"
|
||||||
#include "ietf/swima/ietf_swima_attr_req.h"
|
#include "ietf/swima/ietf_swima_attr_req.h"
|
||||||
@@ -73,7 +73,7 @@ struct private_imv_swima_agent_t {
|
|||||||
/**
|
/**
|
||||||
* REST API to strongTNC manager
|
* REST API to strongTNC manager
|
||||||
*/
|
*/
|
||||||
imv_swima_rest_t *rest_api;
|
rest_t *rest_api;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -770,7 +770,7 @@ imv_agent_if_t *imv_swima_agent_create(const char *name, TNC_IMVID id,
|
|||||||
"%s.plugins.imv-swima.rest_api_timeout", 120, lib->ns);
|
"%s.plugins.imv-swima.rest_api_timeout", 120, lib->ns);
|
||||||
if (rest_api_uri)
|
if (rest_api_uri)
|
||||||
{
|
{
|
||||||
this->rest_api = imv_swima_rest_create(rest_api_uri, rest_api_timeout);
|
this->rest_api = rest_create(rest_api_uri, rest_api_timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
return &this->public;
|
return &this->public;
|
||||||
|
|||||||
@@ -13,22 +13,24 @@
|
|||||||
* for more details.
|
* for more details.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifdef USE_JSON
|
||||||
|
|
||||||
#define _GNU_SOURCE
|
#define _GNU_SOURCE
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "imv_swima_rest.h"
|
#include "rest.h"
|
||||||
|
|
||||||
typedef struct private_imv_swima_rest_t private_imv_swima_rest_t;
|
typedef struct private_rest_t private_rest_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Private data of an imv_swima_rest_t object.
|
* Private data of an rest_t object.
|
||||||
*/
|
*/
|
||||||
struct private_imv_swima_rest_t {
|
struct private_rest_t {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Public members of imv_swima_rest_t
|
* Public members of rest_t
|
||||||
*/
|
*/
|
||||||
imv_swima_rest_t public;
|
rest_t public;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* URI of REST API
|
* URI of REST API
|
||||||
@@ -42,10 +44,41 @@ struct private_imv_swima_rest_t {
|
|||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
METHOD(rest_t, get, status_t,
|
||||||
|
private_rest_t *this, char *command, json_object **jresponse)
|
||||||
|
{
|
||||||
|
struct json_tokener *tokener;
|
||||||
|
chunk_t response = chunk_empty;
|
||||||
|
status_t status;
|
||||||
|
char *uri;
|
||||||
|
|
||||||
|
if (asprintf(&uri, "%s%s",this->uri, command) < 0)
|
||||||
|
{
|
||||||
|
return FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
|
status = lib->fetcher->fetch(lib->fetcher, uri, &response,
|
||||||
|
FETCH_TIMEOUT, this->timeout,
|
||||||
|
FETCH_END);
|
||||||
|
free(uri);
|
||||||
|
|
||||||
|
if (status == SUCCESS && jresponse)
|
||||||
|
{
|
||||||
|
/* Parse HTTP response into a JSON object */
|
||||||
|
tokener = json_tokener_new();
|
||||||
|
*jresponse = json_tokener_parse_ex(tokener, response.ptr, response.len);
|
||||||
|
json_tokener_free(tokener);
|
||||||
|
}
|
||||||
|
free(response.ptr);
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define HTTP_STATUS_CODE_NOT_FOUND 404
|
||||||
#define HTTP_STATUS_CODE_PRECONDITION_FAILED 412
|
#define HTTP_STATUS_CODE_PRECONDITION_FAILED 412
|
||||||
|
|
||||||
METHOD(imv_swima_rest_t, post, status_t,
|
METHOD(rest_t, post, status_t,
|
||||||
private_imv_swima_rest_t *this, char *command, json_object *jrequest,
|
private_rest_t *this, char *command, json_object *jrequest,
|
||||||
json_object **jresponse)
|
json_object **jresponse)
|
||||||
{
|
{
|
||||||
struct json_tokener *tokener;
|
struct json_tokener *tokener;
|
||||||
@@ -72,22 +105,31 @@ METHOD(imv_swima_rest_t, post, status_t,
|
|||||||
|
|
||||||
if (status != SUCCESS)
|
if (status != SUCCESS)
|
||||||
{
|
{
|
||||||
if (code != HTTP_STATUS_CODE_PRECONDITION_FAILED || !response.ptr)
|
switch (code)
|
||||||
{
|
{
|
||||||
DBG2(DBG_IMV, "REST http request failed with status code: %d", code);
|
case HTTP_STATUS_CODE_NOT_FOUND:
|
||||||
status = FAILED;
|
status = NOT_FOUND;
|
||||||
}
|
break;
|
||||||
else
|
case HTTP_STATUS_CODE_PRECONDITION_FAILED:
|
||||||
{
|
if (!response.ptr)
|
||||||
if (jresponse)
|
{
|
||||||
{
|
return FAILED;
|
||||||
/* Parse HTTP response into a JSON object */
|
}
|
||||||
tokener = json_tokener_new();
|
if (jresponse)
|
||||||
*jresponse = json_tokener_parse_ex(tokener, response.ptr,
|
{
|
||||||
response.len);
|
/* Parse HTTP response into a JSON object */
|
||||||
json_tokener_free(tokener);
|
tokener = json_tokener_new();
|
||||||
}
|
*jresponse = json_tokener_parse_ex(tokener, response.ptr,
|
||||||
status = NEED_MORE;
|
response.len);
|
||||||
|
json_tokener_free(tokener);
|
||||||
|
}
|
||||||
|
status = NEED_MORE;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
DBG2(DBG_IMV, "REST http request failed with status code: %d",
|
||||||
|
code);
|
||||||
|
status = FAILED;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
free(response.ptr);
|
free(response.ptr);
|
||||||
@@ -95,8 +137,8 @@ METHOD(imv_swima_rest_t, post, status_t,
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
METHOD(imv_swima_rest_t, destroy, void,
|
METHOD(rest_t, destroy, void,
|
||||||
private_imv_swima_rest_t *this)
|
private_rest_t *this)
|
||||||
{
|
{
|
||||||
free(this->uri);
|
free(this->uri);
|
||||||
free(this);
|
free(this);
|
||||||
@@ -105,12 +147,13 @@ METHOD(imv_swima_rest_t, destroy, void,
|
|||||||
/**
|
/**
|
||||||
* Described in header.
|
* Described in header.
|
||||||
*/
|
*/
|
||||||
imv_swima_rest_t *imv_swima_rest_create(char *uri, u_int timeout)
|
rest_t *rest_create(char *uri, u_int timeout)
|
||||||
{
|
{
|
||||||
private_imv_swima_rest_t *this;
|
private_rest_t *this;
|
||||||
|
|
||||||
INIT(this,
|
INIT(this,
|
||||||
.public = {
|
.public = {
|
||||||
|
.get = _get,
|
||||||
.post = _post,
|
.post = _post,
|
||||||
.destroy = _destroy,
|
.destroy = _destroy,
|
||||||
},
|
},
|
||||||
@@ -121,4 +164,4 @@ imv_swima_rest_t *imv_swima_rest_create(char *uri, u_int timeout)
|
|||||||
return &this->public;
|
return &this->public;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif /* USE_JSON */
|
||||||
@@ -17,47 +17,58 @@
|
|||||||
* @defgroup imv_swima imv_swima
|
* @defgroup imv_swima imv_swima
|
||||||
* @ingroup libimcv_plugins
|
* @ingroup libimcv_plugins
|
||||||
*
|
*
|
||||||
* @defgroup imv_swima_rest_t imv_swima_rest
|
* @defgroup rest_t rest
|
||||||
* @{ @ingroup imv_swima
|
* @{ @ingroup imv_swima
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef IMV_SWIMA_REST_H_
|
#ifndef REST_H_
|
||||||
#define IMV_SWIMA_REST_H_
|
#define REST_H_
|
||||||
|
|
||||||
|
#ifdef USE_JSON
|
||||||
|
|
||||||
#include <library.h>
|
#include <library.h>
|
||||||
|
|
||||||
#include <json.h>
|
#include <json.h>
|
||||||
|
|
||||||
typedef struct imv_swima_rest_t imv_swima_rest_t;
|
typedef struct rest_t rest_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Public REST interface
|
* Public REST interface
|
||||||
*/
|
*/
|
||||||
struct imv_swima_rest_t {
|
struct rest_t {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Post a HTTP request including a JSON object
|
* Send an HTTP GET request returning a JSON object
|
||||||
|
*
|
||||||
|
* @param jresp JSON object in HTTP
|
||||||
|
* @return Status (SUCCESS or FAILED)
|
||||||
|
*/
|
||||||
|
status_t (*get)(rest_t *this, char *command, json_object **jresp);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send an HTTP POST request including a JSON object
|
||||||
*
|
*
|
||||||
* @param jreq JSON object in HTTP request
|
* @param jreq JSON object in HTTP request
|
||||||
* @param jresp JSON object in HTTP response if NEED_MORE
|
* @param jresp JSON object in HTTP response if NEED_MORE
|
||||||
* @return Status (SUCCESS, NEED_MORE or FAILED)
|
* @return Status (SUCCESS, NEED_MORE or FAILED)
|
||||||
*/
|
*/
|
||||||
status_t (*post)(imv_swima_rest_t *this, char *command, json_object *jreq,
|
status_t (*post)(rest_t *this, char *command, json_object *jreq,
|
||||||
json_object **jresp);
|
json_object **jresp);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Destroy imv_swima_rest_t object
|
* Destroy rest_t object
|
||||||
*/
|
*/
|
||||||
void (*destroy)(imv_swima_rest_t *this);
|
void (*destroy)(rest_t *this);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create an imv_swima_rest_t instance
|
* Create an rest_t instance
|
||||||
*
|
*
|
||||||
* @param uri REST URI (http://username:password@hostname[:port]/api/)
|
* @param uri REST URI (http://username:password@hostname[:port]/api/)
|
||||||
* @param timeout Timeout of the REST connection
|
* @param timeout Timeout of the REST connection
|
||||||
*/
|
*/
|
||||||
imv_swima_rest_t* imv_swima_rest_create(char *uri, u_int timeout);
|
rest_t* rest_create(char *uri, u_int timeout);
|
||||||
|
|
||||||
#endif /** IMV_SWIMA_REST_H_ @}*/
|
#endif /* USE_JSON */
|
||||||
|
|
||||||
|
#endif /** REST_H_ @}*/
|
||||||
Reference in New Issue
Block a user