diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/local-def.h | 160 | ||||
-rw-r--r-- | include/proto-def.h | 53 |
2 files changed, 213 insertions, 0 deletions
diff --git a/include/local-def.h b/include/local-def.h new file mode 100644 index 00000000..f69ddcbe --- /dev/null +++ b/include/local-def.h @@ -0,0 +1,160 @@ +/* + alsajson-gw -- provide a REST/HTTP interface to ALSA-Mixer + + Copyright (C) 2015, Fulup Ar Foll + + 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. + + 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., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id: $ +*/ + +#define _GNU_SOURCE + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <fcntl.h> +#include <errno.h> +#include <termios.h> +#include <sys/ioctl.h> +#include <sys/signal.h> +#include <sys/types.h> +#include <time.h> +#include <json.h> +#include <microhttpd.h> + + +#define AJQ_VERSION "0.1" + +/* other definitions --------------------------------------------------- */ + +typedef int BOOL; +#ifndef FALSE + #define FALSE 0 +#endif +#ifndef TRUE + #define TRUE 1 +#endif + +#define PUBLIC +#define STATIC static +#define FAILED -1 + +// prebuild json error are constructed in config.c +typedef enum { AFB_FALSE, AFB_TRUE, AFB_FATAL, AFB_FAIL, AFB_WARNING, AFB_EMPTY, AFB_SUCCESS} AFB_ERROR; +extern char *ERROR_LABEL[]; +#define ERROR_LABEL_DEF {"false", "true","fatal", "fail", "warning", "empty", "success"} + +#define BANNER "<html><head><title>Application Framework Binder</title></head><body>Application Framework </body></html>" +#define JSON_CONTENT "application/json" +#define MAX_POST_SIZE 4096 // maximum size for POST data + +// use to check anonymous data when using dynamic loadable lib +typedef enum {AFB_PLUGIN=1234, AFB_REQUEST=5678} AFB_type; + +// Error code are requested through function to manage json usage count +typedef struct { + int level; + char* label; + json_object *json; +} AFB_ErrorT; + +// Post handler +typedef struct { + char* data; + int len; + int uid; +} AFB_HttpPost; + + +// some usefull static object initialized when entering listen loop. +extern int verbose; +// MHD_lookup_connection_value(connection, MHD_GET_ARGUMENT_KIND, "value"); +typedef struct { + const char *url; + char *plugin; + char *api; + char *post; + struct MHD_Connection *connection; +} AFB_request; + +typedef struct { + char *msg; + int len; +} AFB_redirect_msg; + +// main config structure +typedef struct { + char *logname; // logfile path for info & error log + char *console; // console device name (can be a file or a tty) + int localhostOnly; + int httpdPort; + char *smack; // smack label + char *plugins; // list of requested plugins + char *rootdir; // base dir for httpd file download + char *rootbase; // Angular HTML5 base URL + char *rootapi; // Base URL for REST APIs + char *pidfile; // where to store pid when running background + char *sessiondir; // where to store mixer session files + char *configfile; // where to store configuration on gateway exit + uid_t setuid; + int cacheTimeout; + AFB_redirect_msg html5; // html5 redirect message +} AFB_config; + +// Command line structure hold cli --command + help text +typedef struct { + int val; // command number within application + int has_arg; // command number within application + char *name; // command as used in --xxxx cli + char *help; // help text +} AFB_options; + +typedef json_object* (*AFB_apiCB)(); + +// API definition +typedef struct { + char *name; + AFB_apiCB callback; + char *info; +} AFB_restapi; + +// Plugin definition +typedef struct { + AFB_type type; + char *info; + char *prefix; + json_object *jtype; + AFB_restapi *apis; +} AFB_plugin; + +typedef struct { + AFB_config *config; // pointer to current config + // List of commands to execute + int killPrevious; + int background; // run in backround mode + int foreground; // run in forground mode + int checkAlsa; // Display active Alsa Board + int configsave; // Save config on disk on start + char *cacheTimeout; // http require timeout to be a string + void *httpd; // anonymous structure for httpd handler + int fakemod; // respond to GET/POST request without interacting with sndboard + int forceexit; // when autoconfig from script force exit before starting server + AFB_plugin **plugins; // pointer to REST/API plugins +} AFB_session; + + +#include "proto-def.h" diff --git a/include/proto-def.h b/include/proto-def.h new file mode 100644 index 00000000..934bf30f --- /dev/null +++ b/include/proto-def.h @@ -0,0 +1,53 @@ +/* + alsajson-gw -- provide a REST/HTTP interface to ALSA-Mixer + + Copyright (C) 2015, Fulup Ar Foll + + 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. + + 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., 675 Mass Ave, Cambridge, MA 02139, USA. + + $Id: $ +*/ + +// Rest-api +PUBLIC json_object* pingSample (AFB_plugin *plugin, AFB_session *session, AFB_request *post); +PUBLIC const char* getQueryValue (AFB_request * request, char *name); +PUBLIC AFB_plugin *afsvRegister (AFB_session *session); +PUBLIC int doRestApi(struct MHD_Connection *connection, AFB_session *session, const char *method, const char* url); + +// Session handling +PUBLIC AFB_ERROR sessionCheckdir (AFB_session *session); +PUBLIC json_object *sessionList (AFB_session *session, AFB_request *request); +PUBLIC json_object *sessionToDisk (AFB_session *session, AFB_request *request, char *name,json_object *jsonSession); +PUBLIC json_object *sessionFromDisk (AFB_session *session, AFB_request *request, char *name); + + +// Httpd server +PUBLIC AFB_ERROR httpdStart (AFB_session *session); +PUBLIC AFB_ERROR httpdLoop (AFB_session *session); +PUBLIC void httpdStop (AFB_session *session); + + +// config management +PUBLIC char *configTime (void); +PUBLIC AFB_session *configInit (void); +PUBLIC json_object *jsonNewMessage (AFB_ERROR level, char* format, ...); +PUBLIC json_object *jsonNewStatus (AFB_ERROR level); +PUBLIC json_object *jsonNewjtype (void); +PUBLIC json_object *jsonNewMessage (AFB_ERROR level, char* format, ...); +PUBLIC void jsonDumpObject (json_object * jObject); +PUBLIC AFB_ERROR configLoadFile (AFB_session * session, AFB_config *cliconfig); +PUBLIC void configStoreFile (AFB_session * session); + + |