Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Xiph.Org
Icecast-Server
Commits
4b190d24
Commit
4b190d24
authored
Apr 28, 2018
by
Philipp Schafft
🦁
Browse files
Feature: Added per Error UUID. Also formats error pages nicer
parent
b42378ab
Changes
3
Hide whitespace changes
Inline
Side-by-side
src/client.c
View file @
4b190d24
...
...
@@ -215,26 +215,26 @@ int client_read_bytes(client_t *client, void *buf, unsigned len)
return
bytes
;
}
static
inline
void
_client_send_error
(
client_t
*
client
,
int
status
,
int
plain
,
const
char
*
message
)
static
inline
void
_client_send_error
(
client_t
*
client
,
int
plain
,
const
icecast_error_t
*
error
)
{
ssize_t
ret
;
refbuf_t
*
data
;
if
(
status
==
500
)
{
client_send_500
(
client
,
message
);
if
(
error
->
http_
status
==
500
)
{
client_send_500
(
client
,
error
->
message
);
return
;
}
data
=
refbuf_new
(
PER_CLIENT_REFBUF_SIZE
);
if
(
!
data
)
{
client_send_500
(
client
,
message
);
client_send_500
(
client
,
error
->
message
);
return
;
}
client
->
reuse
=
ICECAST_REUSE_KEEPALIVE
;
ret
=
util_http_build_header
(
client
->
refbuf
->
data
,
PER_CLIENT_REFBUF_SIZE
,
0
,
0
,
status
,
NULL
,
0
,
error
->
http_
status
,
NULL
,
plain
?
"text/plain"
:
"text/html"
,
"utf-8"
,
NULL
,
NULL
,
client
);
...
...
@@ -245,12 +245,13 @@ static inline void _client_send_error(client_t *client, int status, int plain, c
}
if
(
plain
)
{
strncpy
(
data
->
data
,
message
,
data
->
len
);
data
->
data
[
data
->
len
-
1
]
=
0
;
snprintf
(
data
->
data
,
data
->
len
,
"Error %i
\r\n
---------
\r\n\r\n
Message: %s
\r\n\r\n
Error code: %s
\r\n
"
,
error
->
http_status
,
error
->
message
,
error
->
uuid
);
}
else
{
snprintf
(
data
->
data
,
data
->
len
,
"<html><head><title>Error %i</title></head><body><
b>%i -
%s</
b
></body></html>
\r\n
"
,
status
,
status
,
message
);
"<html><head><title>Error %i</title></head><body><
h1>Error %i</h1><hr><p><b>%s</b></p><p>Error code:
%s</
p
></body></html>
\r\n
"
,
error
->
http_status
,
error
->
http_status
,
error
->
message
,
error
->
uuid
);
}
data
->
len
=
strlen
(
data
->
data
);
...
...
@@ -258,7 +259,7 @@ static inline void _client_send_error(client_t *client, int status, int plain, c
"Content-Length: %llu
\r\n\r\n
"
,
(
long
long
unsigned
int
)
data
->
len
);
client
->
respcode
=
status
;
client
->
respcode
=
error
->
http_
status
;
client
->
refbuf
->
len
=
strlen
(
client
->
refbuf
->
data
);
client
->
refbuf
->
next
=
data
;
...
...
@@ -286,7 +287,7 @@ void client_send_error_by_id(client_t *client, int id)
plain
=
1
;
}
_client_send_error
(
client
,
error
->
http_status
,
plain
,
error
->
message
);
_client_send_error
(
client
,
plain
,
error
);
}
void
client_send_101
(
client_t
*
client
,
reuse_t
reuse
)
...
...
src/errors.c
View file @
4b190d24
...
...
@@ -17,82 +17,121 @@
// cut -d' ' -f2 x | while read x; do printf " {.id = %-60s .http_status = xxx,\n .message = \"\"},\n" "$x",; done
const
icecast_error_t
__errors
[]
=
{
{.
id
=
ICECAST_ERROR_ADMIN_DEST_NOT_RUNNING
,
.
http_status
=
400
,
.
uuid
=
"52735a81-16fe-4d7e-9984-5aed8a941055"
,
.
message
=
"Destination not running"
},
{.
id
=
ICECAST_ERROR_ADMIN_METADAT_BADCALL
,
.
http_status
=
400
,
.
uuid
=
"85d33e67-5c4e-4511-b4fa-3ca69ccd03de"
,
.
message
=
"illegal metadata call"
},
{.
id
=
ICECAST_ERROR_ADMIN_METADAT_NO_SUCH_ACTION
,
.
http_status
=
501
,
.
uuid
=
"14f4d814-98d9-468c-8a0b-ba5e74c9d771"
,
.
message
=
"No such action"
},
{.
id
=
ICECAST_ERROR_ADMIN_MISSING_PARAMETER
,
.
http_status
=
400
,
.
uuid
=
"cb11dc71-6149-454c-8d4e-47a3af26b03a"
,
.
message
=
"Missing parameter"
},
{.
id
=
ICECAST_ERROR_ADMIN_missing_parameter
,
.
http_status
=
400
,
.
uuid
=
"8be9ef0a-2b32-450c-aec9-a414ca0c074c"
,
.
message
=
"missing parameter"
},
{.
id
=
ICECAST_ERROR_ADMIN_MOUNT_NOT_ACCEPT_URL_UPDATES
,
.
http_status
=
501
,
.
uuid
=
"3bed51bb-a10f-4af3-9965-4e67181de7d6"
,
.
message
=
"mountpoint will not accept URL updates"
},
{.
id
=
ICECAST_ERROR_ADMIN_NO_SUCH_DESTINATION
,
.
http_status
=
404
,
.
uuid
=
"c5f1ee06-46a0-4697-9f01-6e9fc333d555"
,
.
message
=
"No such destination"
},
{.
id
=
ICECAST_ERROR_ADMIN_ROLEMGN_ADD_NOSYS
,
.
http_status
=
501
,
.
uuid
=
"7e1a8426-2ae1-4a6b-bfd9-59d8f8153021"
,
.
message
=
"Adding users to role not supported by role"
},
{.
id
=
ICECAST_ERROR_ADMIN_ROLEMGN_DELETE_NOSYS
,
.
http_status
=
501
,
.
uuid
=
"367fbad1-389e-4292-bba8-c97984e616cc"
,
.
message
=
"Deleting users from role not supported by role"
},
{.
id
=
ICECAST_ERROR_ADMIN_ROLEMGN_ROLE_NOT_FOUND
,
.
http_status
=
404
,
.
uuid
=
"59fe9c81-8c34-49ff-800f-7ec42ea498be"
,
.
message
=
"Role not found"
},
{.
id
=
ICECAST_ERROR_ADMIN_SOURCE_DOES_NOT_EXIST
,
.
http_status
=
404
,
.
uuid
=
"2f51a026-02e4-4fe4-bf9d-cc16557b3b65"
,
.
message
=
"Source does not exist"
},
{.
id
=
ICECAST_ERROR_ADMIN_SOURCE_IS_NOT_AVAILABLE
,
.
http_status
=
400
,
.
uuid
=
"00b9d977-f41d-455f-820f-6d457dffb246"
,
.
message
=
"Source is not available"
},
{.
id
=
ICECAST_ERROR_ADMIN_SUPPLIED_MOUNTPOINTS_ARE_IDENTICAL
,
.
http_status
=
400
,
.
uuid
=
"4be9a010-7a3f-44e4-b74d-3c6d9c4f7236"
,
.
message
=
"supplied mountpoints are identical"
},
{.
id
=
ICECAST_ERROR_ADMIN_UNRECOGNISED_COMMAND
,
.
http_status
=
400
,
.
uuid
=
"811bddac-5be5-4580-9cde-7b849e66dfe5"
,
.
message
=
"unrecognised command"
},
{.
id
=
ICECAST_ERROR_AUTH_BUSY
,
.
http_status
=
503
,
.
uuid
=
"26708754-8f98-4191-81d1-7fb7246200d6"
,
.
message
=
"busy, please try again later"
},
{.
id
=
ICECAST_ERROR_CON_CONTENT_TYPE_NOSYS
,
.
http_status
=
415
,
.
uuid
=
"f684ad3c-513b-4d87-9a66-424788bc6adb"
,
.
message
=
"Content-type not supported"
},
{.
id
=
ICECAST_ERROR_CON_INTERNAL_FORMAT_ALLOC_ERROR
,
.
http_status
=
500
,
.
uuid
=
"47a4b11b-5d2a-46e2-8948-942e7b0af3e6"
,
.
message
=
"internal format allocation problem"
},
{.
id
=
ICECAST_ERROR_CON_MISSING_PASS_PARAMETER
,
.
http_status
=
400
/* XXX */
,
.
uuid
=
"b59c3a05-e2b1-4a14-8798-bbe1ae46603b"
,
.
message
=
"missing pass parameter"
},
{.
id
=
ICECAST_ERROR_CON_MOUNT_IN_USE
,
.
http_status
=
409
,
.
uuid
=
"c5724467-5f85-48c7-b45a-915c3150c292"
,
.
message
=
"Mountpoint in use"
},
{.
id
=
ICECAST_ERROR_CON_MOUNTPOINT_NOT_STARTING_WITH_SLASH
,
.
http_status
=
400
,
.
uuid
=
"1ae45ead-40fc-4de2-b56f-e54d3247f2ee"
,
.
message
=
"source mountpoint not starting with /"
},
{.
id
=
ICECAST_ERROR_CON_NO_CONTENT_TYPE_GIVEN
,
.
http_status
=
400
,
.
uuid
=
"2cd86778-ac30-49e7-a108-26d627a7923b"
,
.
message
=
"No Content-type given"
},
{.
id
=
ICECAST_ERROR_CON_PER_CRED_CLIENT_LIMIT
,
.
http_status
=
429
,
.
uuid
=
"9c72c1ec-f638-4d33-a077-6acbbff25317"
,
.
message
=
"Reached limit of concurrent connections on those credentials"
},
{.
id
=
ICECAST_ERROR_CON_rejecting_client_for_whatever_reason
,
.
http_status
=
403
/* XXX */
,
.
uuid
=
"534ee9af-8be5-4645-a839-501d22d541bd"
,
.
message
=
"Rejecting client for whatever reason"
},
{.
id
=
ICECAST_ERROR_CON_SOURCE_CLIENT_LIMIT
,
.
http_status
=
503
,
.
uuid
=
"c770182d-c854-422a-a8e5-7142689234a3"
,
.
message
=
"too many sources connected"
},
{.
id
=
ICECAST_ERROR_CON_UNIMPLEMENTED
,
.
http_status
=
501
,
.
uuid
=
"58ce6cb4-72b4-49da-8ad2-feaf775bc61e"
,
.
message
=
"Unimplemented"
},
{.
id
=
ICECAST_ERROR_CON_UNKNOWN_REQUEST
,
.
http_status
=
405
,
.
uuid
=
"78f590cc-8812-40d5-a4ef-17344ab75b35"
,
.
message
=
"unknown request"
},
{.
id
=
ICECAST_ERROR_CON_UPGRADE_ERROR
,
.
http_status
=
400
/* XXX */
,
.
uuid
=
"ec16f654-f262-415f-ab91-95703ae33704"
,
.
message
=
"Can not upgrade protocol"
},
{.
id
=
ICECAST_ERROR_FSERV_FILE_NOT_FOUND
,
.
http_status
=
404
,
.
uuid
=
"18c32b43-0d8e-469d-b434-10133cdd06ad"
,
.
message
=
"The file you requested could not be found"
},
{.
id
=
ICECAST_ERROR_FSERV_FILE_NOT_READABLE
,
.
http_status
=
404
/* XXX */
,
.
uuid
=
"c883d55d-fb41-4f4c-8800-563f5542f51d"
,
.
message
=
"File not readable"
},
{.
id
=
ICECAST_ERROR_FSERV_REQUEST_RANGE_NOT_SATISFIABLE
,
.
http_status
=
416
,
.
uuid
=
"5874cc51-770b-42b5-82d2-737b2b406b30"
,
.
message
=
"Request Range Not Satisfiable"
},
{.
id
=
ICECAST_ERROR_GEN_BUFFER_REALLOC
,
.
http_status
=
500
,
.
uuid
=
"cda8203e-f237-4090-8d43-544efdd6295c"
,
.
message
=
"Buffer reallocation failed."
},
{.
id
=
ICECAST_ERROR_GEN_CLIENT_LIMIT
,
.
http_status
=
503
,
.
uuid
=
"87fd3e61-6702-4473-b506-f616d27a142f"
,
.
message
=
"Icecast connection limit reached"
},
{.
id
=
ICECAST_ERROR_GEN_CLIENT_NEEDS_TO_AUTHENTICATE
,
.
http_status
=
401
,
.
uuid
=
"25387198-0643-4577-9139-7c4f24f59d4a"
,
.
message
=
"You need to authenticate"
},
{.
id
=
ICECAST_ERROR_GEN_HEADER_GEN_FAILED
,
.
http_status
=
500
,
.
uuid
=
"a8b3c3fe-cb87-45fe-9a9d-ee4c2075d43a"
,
.
message
=
"Header generation failed."
},
{.
id
=
ICECAST_ERROR_GEN_MEMORY_EXHAUSTED
,
.
http_status
=
503
,
.
uuid
=
"18411e73-713e-4910-b7e4-52a2e324b4e0"
,
.
message
=
"memory exhausted"
},
{.
id
=
ICECAST_ERROR_SOURCE_MOUNT_UNAVAILABLE
,
.
http_status
=
404
/* XXX */
,
.
uuid
=
"88d06875-fcf2-4417-84af-05866c97745c"
,
.
message
=
"Mount unavailable"
},
{.
id
=
ICECAST_ERROR_SOURCE_STREAM_PREPARATION_ERROR
,
.
http_status
=
500
/* XXX */
,
.
uuid
=
"9e50d94d-f03d-4515-8216-577bf8e9f70d"
,
.
message
=
"Stream preparation error"
},
{.
id
=
ICECAST_ERROR_XSLT_PARSE
,
.
http_status
=
404
/* XXX */
,
.
uuid
=
"f86b5b28-c1f8-49f6-a4cd-a18e2a6a44fd"
,
.
message
=
"Could not parse XSLT file"
},
{.
id
=
ICECAST_ERROR_XSLT_problem
,
.
http_status
=
500
,
.
uuid
=
"d3c6e4b3-7d6e-4191-a81b-970273067ae3"
,
.
message
=
"XSLT problem"
}
};
...
...
src/errors.h
View file @
4b190d24
...
...
@@ -52,6 +52,7 @@
struct
icecast_error_tag
{
const
int
id
;
const
int
http_status
;
const
char
*
uuid
;
const
char
*
message
;
};
...
...
Write
Preview
Supports
Markdown
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