165 lines
5.3 KiB
C
165 lines
5.3 KiB
C
/*
|
|
* $Id: $
|
|
* Public plug-in interface
|
|
*
|
|
* Copyright (C) 2006 Ron Pedde (ron@pedde.com)
|
|
*
|
|
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*/
|
|
|
|
#ifndef _FF_PLUGINS_H_
|
|
#define _FF_PLUGINS_H_
|
|
|
|
/* Plugin types */
|
|
#define PLUGIN_OUTPUT 1
|
|
#define PLUGIN_SCANNER 2
|
|
#define PLUGIN_DATABASE 4
|
|
#define PLUGIN_EVENT 8
|
|
#define PLUGIN_TRANSCODE 16
|
|
|
|
/* plugin event types */
|
|
#define PLUGIN_EVENT_LOG 0
|
|
#define PLUGIN_EVENT_FULLSCAN_START 1
|
|
#define PLUGIN_EVENT_FULLSCAN_END 2
|
|
#define PLUGIN_EVENT_STARTING 3
|
|
#define PLUGIN_EVENT_SHUTDOWN 4
|
|
#define PLUGIN_EVENT_STARTSTREAM 5
|
|
#define PLUGIN_EVENT_ABORTSTREAM 6
|
|
#define PLUGIN_EVENT_ENDSTREAM 7
|
|
|
|
#define PLUGIN_VERSION 1
|
|
|
|
#ifndef E_FATAL
|
|
# define E_FATAL 0
|
|
# define E_LOG 1
|
|
# define E_WARN 2
|
|
# define E_INF 5
|
|
# define E_DBG 9
|
|
# define E_SPAM 10
|
|
#endif
|
|
|
|
#define COUNT_SONGS 0
|
|
#define COUNT_PLAYLISTS 1
|
|
|
|
struct tag_ws_conninfo;
|
|
|
|
/* Functions that must be exported by different plugin types */
|
|
typedef struct tag_plugin_output_fn {
|
|
int(*can_handle)(struct tag_ws_conninfo *pwsc);
|
|
void(*handler)(struct tag_ws_conninfo *pwsc);
|
|
int(*auth)(struct tag_ws_conninfo *pwsc, char *username, char *pw);
|
|
} PLUGIN_OUTPUT_FN;
|
|
|
|
typedef struct tag_plugin_event_fn {
|
|
void(*handler)(int event_id, int intval, void *vp, int len);
|
|
} PLUGIN_EVENT_FN;
|
|
|
|
typedef struct tag_plugin_transcode_fn {
|
|
void *(*ssc_init)(void);
|
|
void (*ssc_deinit)(void*);
|
|
int (*ssc_open)(void*, char *, char*, int);
|
|
int (*ssc_close)(void*);
|
|
int (*ssc_read)(void*, char*, int);
|
|
char *(*ssc_error)(void*);
|
|
} PLUGIN_TRANSCODE_FN;
|
|
|
|
/* info for rendezvous advertising */
|
|
typedef struct tag_plugin_rend_info {
|
|
char *type;
|
|
char *txt;
|
|
} PLUGIN_REND_INFO;
|
|
|
|
/* main info struct that plugins must provide */
|
|
typedef struct tag_plugin_info {
|
|
int version; /* PLUGIN_VERSION */
|
|
int type; /* PLUGIN_OUTPUT, etc */
|
|
char *server; /* Server/version format */
|
|
PLUGIN_OUTPUT_FN *output_fns; /* functions for different plugin types */
|
|
PLUGIN_EVENT_FN *event_fns;
|
|
PLUGIN_TRANSCODE_FN *transcode_fns;
|
|
PLUGIN_REND_INFO *rend_info; /* array of rend announcements */
|
|
char *codeclist; /* comma separated list of codecs */
|
|
} PLUGIN_INFO;
|
|
|
|
|
|
#define QUERY_TYPE_ITEMS 0
|
|
#define QUERY_TYPE_PLAYLISTS 1
|
|
#define QUERY_TYPE_DISTINCT 2
|
|
|
|
#define FILTER_TYPE_FIREFLY 0
|
|
#define FILTER_TYPE_APPLE 1
|
|
|
|
typedef struct tag_db_query {
|
|
int query_type;
|
|
char *distinct_field;
|
|
int filter_type;
|
|
char *filter;
|
|
|
|
int offset;
|
|
int limit;
|
|
|
|
int playlist_id; /* for items query */
|
|
int totalcount; /* returned total count */
|
|
void *priv;
|
|
} DB_QUERY;
|
|
|
|
|
|
/* version 1 plugin imports */
|
|
typedef struct tag_plugin_input_fn {
|
|
/* webserver helpers */
|
|
char* (*ws_uri)(struct tag_ws_conninfo *);
|
|
void (*ws_will_close)(struct tag_ws_conninfo *);
|
|
int (*ws_returnerror)(struct tag_ws_conninfo *, int, char *);
|
|
char* (*ws_getvar)(struct tag_ws_conninfo *, char *);
|
|
int (*ws_writefd)(struct tag_ws_conninfo *, char *, ...);
|
|
int (*ws_addresponseheader)(struct tag_ws_conninfo *, char *, char *, ...);
|
|
void (*ws_emitheaders)(struct tag_ws_conninfo *);
|
|
int (*ws_fd)(struct tag_ws_conninfo *);
|
|
char* (*ws_getrequestheader)(struct tag_ws_conninfo *, char *);
|
|
int (*ws_writebinary)(struct tag_ws_conninfo *, char *, int);
|
|
|
|
/* misc helpers */
|
|
char* (*server_ver)(void);
|
|
int (*server_name)(char *, int *);
|
|
void (*log)(int, char *, ...);
|
|
int (*should_transcode)(struct tag_ws_conninfo *, char *);
|
|
|
|
int (*db_count)(void);
|
|
int (*db_enum_start)(char **, DB_QUERY *);
|
|
int (*db_enum_fetch_row)(char **, char ***, DB_QUERY *);
|
|
int (*db_enum_end)(char **);
|
|
int (*db_enum_restart)(char **, DB_QUERY *);
|
|
void (*db_enum_dispose)(char **, DB_QUERY*);
|
|
void (*stream)(struct tag_ws_conninfo *, char *);
|
|
|
|
int (*db_add_playlist)(char **pe, char *name, int type, char *clause, char *path, int index, int *playlistid);
|
|
int (*db_add_playlist_item)(char **pe, int playlistid, int songid);
|
|
int (*db_edit_playlist)(char **pe, int id, char *name, char *clause);
|
|
int (*db_delete_playlist)(char **pe, int playlistid);
|
|
int (*db_delete_playlist_item)(char **pe, int playlistid, int songid);
|
|
int (*db_revision)(void);
|
|
int (*db_count_items)(int what);
|
|
int (*db_wait_update)(struct tag_ws_conninfo *);
|
|
|
|
char *(*conf_alloc_string)(char *section, char *key, char *dflt);
|
|
void (*conf_dispose_string)(char *str);
|
|
int (*conf_get_int)(char *section, char *key, int dflt);
|
|
|
|
void (*config_set_status)(struct tag_ws_conninfo *pwsc, int session, char *fmt, ...);
|
|
} PLUGIN_INPUT_FN;
|
|
|
|
|
|
#endif /* _FF_PLUGINS_ */
|