Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Icecast-Server
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
94
Issues
94
List
Boards
Labels
Service Desk
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Incidents
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
External Wiki
External Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Xiph.Org
Icecast-Server
Commits
fd4f2827
Commit
fd4f2827
authored
Jul 20, 2018
by
Philipp Schafft
🦁
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Cleanup: Seperated relay config from runtime data
parent
75314c2b
Changes
6
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
311 additions
and
197 deletions
+311
-197
src/cfgfile.c
src/cfgfile.c
+34
-50
src/cfgfile.h
src/cfgfile.h
+20
-1
src/global.h
src/global.h
+2
-2
src/icecasttypes.h
src/icecasttypes.h
+1
-1
src/slave.c
src/slave.c
+251
-124
src/slave.h
src/slave.h
+3
-19
No files found.
src/cfgfile.c
View file @
fd4f2827
...
...
@@ -622,13 +622,9 @@ void config_clear(ice_config_t *c)
{
ice_config_dir_t
*
dirnode
,
*
nextdirnode
;
relay_server
*
relay
,
*
nextrelay
;
mount_proxy
*
mount
,
*
nextmount
;
#ifdef USE_YP
int
i
;
#endif
size_t
i
;
free
(
c
->
config_filename
);
...
...
@@ -666,15 +662,10 @@ void config_clear(ice_config_t *c)
while
((
c
->
listen_sock
=
config_clear_listener
(
c
->
listen_sock
)));
thread_mutex_lock
(
&
(
_locks
.
relay_lock
));
relay
=
c
->
relay
;
while
(
relay
)
{
nextrelay
=
relay
->
next
;
xmlFree
(
relay
->
server
);
xmlFree
(
relay
->
mount
);
xmlFree
(
relay
->
localmount
);
free
(
relay
);
relay
=
nextrelay
;
for
(
i
=
0
;
i
<
c
->
relay_length
;
i
++
)
{
relay_config_free
(
c
->
relay
[
i
]);
}
free
(
c
->
relay
);
thread_mutex_unlock
(
&
(
_locks
.
relay_lock
));
mount
=
c
->
mounts
;
...
...
@@ -694,10 +685,8 @@ void config_clear(ice_config_t *c)
dirnode
=
nextdirnode
;
}
#ifdef USE_YP
i
=
0
;
while
(
i
<
c
->
num_yp_directories
)
{
for
(
i
=
0
;
i
<
c
->
num_yp_directories
;
i
++
)
{
xmlFree
(
c
->
yp_url
[
i
]);
i
++
;
}
#endif
...
...
@@ -1690,26 +1679,21 @@ static void _parse_relay(xmlDocPtr doc,
ice_config_t
*
configuration
)
{
char
*
tmp
;
relay_server
*
relay
=
calloc
(
1
,
sizeof
(
relay_server
));
relay_server
*
current
=
configuration
->
relay
;
relay_server
*
last
=
NULL
;
relay_config_t
*
relay
=
calloc
(
1
,
sizeof
(
relay_config_t
));
relay_config_t
**
n
=
realloc
(
configuration
->
relay
,
sizeof
(
*
configuration
->
relay
)
*
(
configuration
->
relay_length
+
1
));
while
(
current
)
{
last
=
current
;
current
=
current
->
next
;
if
(
!
n
)
{
ICECAST_LOG_ERROR
(
"Can not allocate memory for additional relay."
)
;
return
;
}
if
(
last
)
{
last
->
next
=
relay
;
}
else
{
configuration
->
relay
=
relay
;
}
configuration
->
relay
=
n
;
configuration
->
relay
[
configuration
->
relay_length
++
]
=
relay
;
relay
->
next
=
NULL
;
relay
->
mp3metadata
=
1
;
relay
->
on_demand
=
configuration
->
on_demand
;
relay
->
server
=
(
char
*
)
xmlCharStrdup
(
"127.0.0.1"
);
relay
->
mount
=
(
char
*
)
xmlCharStrdup
(
"/"
);
relay
->
upstream_default
.
mp3metadata
=
1
;
relay
->
on_demand
=
configuration
->
on_demand
;
relay
->
upstream_default
.
server
=
(
char
*
)
xmlCharStrdup
(
"127.0.0.1"
);
relay
->
upstream_default
.
mount
=
(
char
*
)
xmlCharStrdup
(
"/"
);
do
{
if
(
node
==
NULL
)
...
...
@@ -1718,16 +1702,16 @@ static void _parse_relay(xmlDocPtr doc,
continue
;
if
(
xmlStrcmp
(
node
->
name
,
XMLSTR
(
"server"
))
==
0
)
{
if
(
relay
->
server
)
xmlFree
(
relay
->
server
);
relay
->
server
=
(
char
*
)
xmlNodeListGetString
(
doc
,
if
(
relay
->
upstream_default
.
server
)
xmlFree
(
relay
->
upstream_default
.
server
);
relay
->
upstream_default
.
server
=
(
char
*
)
xmlNodeListGetString
(
doc
,
node
->
xmlChildrenNode
,
1
);
}
else
if
(
xmlStrcmp
(
node
->
name
,
XMLSTR
(
"port"
))
==
0
)
{
__read_int
(
doc
,
node
,
&
relay
->
port
,
"<port> setting must not be empty."
);
__read_int
(
doc
,
node
,
&
relay
->
upstream_default
.
port
,
"<port> setting must not be empty."
);
}
else
if
(
xmlStrcmp
(
node
->
name
,
XMLSTR
(
"mount"
))
==
0
)
{
if
(
relay
->
mount
)
xmlFree
(
relay
->
mount
);
relay
->
mount
=
(
char
*
)
xmlNodeListGetString
(
doc
,
if
(
relay
->
upstream_default
.
mount
)
xmlFree
(
relay
->
upstream_default
.
mount
);
relay
->
upstream_default
.
mount
=
(
char
*
)
xmlNodeListGetString
(
doc
,
node
->
xmlChildrenNode
,
1
);
}
else
if
(
xmlStrcmp
(
node
->
name
,
XMLSTR
(
"local-mount"
))
==
0
)
{
if
(
relay
->
localmount
)
...
...
@@ -1736,18 +1720,18 @@ static void _parse_relay(xmlDocPtr doc,
node
->
xmlChildrenNode
,
1
);
}
else
if
(
xmlStrcmp
(
node
->
name
,
XMLSTR
(
"relay-shoutcast-metadata"
))
==
0
)
{
tmp
=
(
char
*
)
xmlNodeListGetString
(
doc
,
node
->
xmlChildrenNode
,
1
);
relay
->
mp3metadata
=
util_str_to_bool
(
tmp
);
relay
->
upstream_default
.
mp3metadata
=
util_str_to_bool
(
tmp
);
if
(
tmp
)
xmlFree
(
tmp
);
}
else
if
(
xmlStrcmp
(
node
->
name
,
XMLSTR
(
"username"
))
==
0
)
{
if
(
relay
->
username
)
xmlFree
(
relay
->
username
);
relay
->
username
=
(
char
*
)
xmlNodeListGetString
(
doc
,
if
(
relay
->
u
pstream_default
.
u
sername
)
xmlFree
(
relay
->
u
pstream_default
.
u
sername
);
relay
->
u
pstream_default
.
u
sername
=
(
char
*
)
xmlNodeListGetString
(
doc
,
node
->
xmlChildrenNode
,
1
);
}
else
if
(
xmlStrcmp
(
node
->
name
,
XMLSTR
(
"password"
))
==
0
)
{
if
(
relay
->
password
)
xmlFree
(
relay
->
password
);
relay
->
password
=
(
char
*
)
xmlNodeListGetString
(
doc
,
if
(
relay
->
upstream_default
.
password
)
xmlFree
(
relay
->
upstream_default
.
password
);
relay
->
upstream_default
.
password
=
(
char
*
)
xmlNodeListGetString
(
doc
,
node
->
xmlChildrenNode
,
1
);
}
else
if
(
xmlStrcmp
(
node
->
name
,
XMLSTR
(
"on-demand"
))
==
0
)
{
tmp
=
(
char
*
)
xmlNodeListGetString
(
doc
,
node
->
xmlChildrenNode
,
1
);
...
...
@@ -1755,14 +1739,14 @@ static void _parse_relay(xmlDocPtr doc,
if
(
tmp
)
xmlFree
(
tmp
);
}
else
if
(
xmlStrcmp
(
node
->
name
,
XMLSTR
(
"bind"
))
==
0
)
{
if
(
relay
->
bind
)
xmlFree
(
relay
->
bind
);
relay
->
bind
=
(
char
*
)
xmlNodeListGetString
(
doc
,
if
(
relay
->
upstream_default
.
bind
)
xmlFree
(
relay
->
upstream_default
.
bind
);
relay
->
upstream_default
.
bind
=
(
char
*
)
xmlNodeListGetString
(
doc
,
node
->
xmlChildrenNode
,
1
);
}
}
while
((
node
=
node
->
next
));
if
(
relay
->
localmount
==
NULL
)
relay
->
localmount
=
(
char
*
)
xmlStrdup
(
XMLSTR
(
relay
->
mount
));
relay
->
localmount
=
(
char
*
)
xmlStrdup
(
XMLSTR
(
relay
->
upstream_default
.
mount
));
}
static
void
_parse_listen_socket
(
xmlDocPtr
doc
,
...
...
src/cfgfile.h
View file @
fd4f2827
...
...
@@ -173,6 +173,24 @@ typedef struct _config_tls_context {
char
*
cipher_list
;
}
config_tls_context_t
;
typedef
struct
{
char
*
server
;
int
port
;
char
*
mount
;
char
*
username
;
char
*
password
;
char
*
bind
;
int
mp3metadata
;
}
relay_config_upstream_t
;
typedef
struct
{
char
*
localmount
;
int
on_demand
;
size_t
upstreams
;
relay_config_upstream_t
*
upstream
;
relay_config_upstream_t
upstream_default
;
}
relay_config_t
;
struct
ice_config_tag
{
char
*
config_filename
;
...
...
@@ -219,7 +237,8 @@ struct ice_config_tag {
/* is TLS supported by the server? */
int
tls_ok
;
relay_server
*
relay
;
size_t
relay_length
;
relay_config_t
**
relay
;
mount_proxy
*
mounts
;
...
...
src/global.h
View file @
fd4f2827
...
...
@@ -36,9 +36,9 @@ typedef struct ice_global_tag
avl_tree
*
source_tree
;
/* for locally defined relays */
relay_
server
*
relays
;
relay_
t
*
relays
;
/* relays retrieved from master */
relay_
server
*
master_relays
;
relay_
t
*
master_relays
;
module_container_t
*
modulecontainer
;
...
...
src/icecasttypes.h
View file @
fd4f2827
...
...
@@ -90,7 +90,7 @@ typedef enum {
/* ---[ slave.[ch] ]--- */
typedef
struct
_relay_server
relay_server
;
typedef
struct
relay_tag
relay_t
;
/* ---[ module.[ch] ]--- */
...
...
src/slave.c
View file @
fd4f2827
This diff is collapsed.
Click to expand it.
src/slave.h
View file @
fd4f2827
...
...
@@ -15,29 +15,13 @@
#include "common/thread/thread.h"
#include "icecasttypes.h"
struct
_relay_server
{
char
*
server
;
int
port
;
char
*
mount
;
char
*
username
;
char
*
password
;
char
*
localmount
;
char
*
bind
;
source_t
*
source
;
int
mp3metadata
;
int
on_demand
;
int
running
;
int
cleanup
;
time_t
start
;
thread_type
*
thread
;
relay_server
*
next
;
};
#include "cfgfile.h"
void
slave_initialize
(
void
);
void
slave_shutdown
(
void
);
void
slave_update_all_mounts
(
void
);
void
slave_rebuild_mounts
(
void
);
relay_server
*
relay_free
(
relay_server
*
relay
);
void
relay_config_free
(
relay_config_t
*
relay
);
relay_t
*
relay_free
(
relay_t
*
relay
);
#endif
/* __SLAVE_H__ */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment