Skip to content

Commit d4a514f

Browse files
committed
nxplayer: add more error messages
nxplayer currently only returns directly '-ENOENT', which makes it impossible to know the specific reason for the failure when testing audio with nxplayer. Therefore, I modified this part of the logic to print out the error as much as possible. Signed-off-by: Tang Meng <v-tangmeng@xiaomi.com>
1 parent 971a737 commit d4a514f

File tree

2 files changed

+68
-13
lines changed

2 files changed

+68
-13
lines changed

system/nxplayer/nxplayer.c

Lines changed: 52 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,6 @@ static int _open_with_http(const char *fullurl)
199199
n = netlib_parsehttpurl(fullurl, &port,
200200
hostname, sizeof(hostname) - 1,
201201
relurl, sizeof(relurl) - 1);
202-
203202
if (OK != n)
204203
{
205204
printf("netlib_parsehttpurl() returned %d\n", n);
@@ -221,18 +220,35 @@ static int _open_with_http(const char *fullurl)
221220

222221
FAR struct hostent *he;
223222
he = gethostbyname(hostname);
223+
if (!he)
224+
{
225+
close(s);
226+
return -ENETUNREACH; /* DNS resolution failed */
227+
}
224228

225229
memcpy(&server.sin_addr.s_addr,
226230
he->h_addr, sizeof(in_addr_t));
227-
228231
n = connect(s,
229232
(struct sockaddr *)&server,
230233
sizeof(struct sockaddr_in));
231-
232234
if (-1 == n)
233235
{
236+
int err = errno;
234237
close(s);
235-
return -1;
238+
switch (err)
239+
{
240+
case ETIMEDOUT:
241+
return -ETIMEDOUT;
242+
243+
case ECONNREFUSED:
244+
return -ECONNREFUSED;
245+
246+
case ENETUNREACH:
247+
return -ENETUNREACH;
248+
249+
default:
250+
return -1;
251+
}
236252
}
237253

238254
/* Send GET request */
@@ -250,8 +266,25 @@ static int _open_with_http(const char *fullurl)
250266

251267
if (200 != n)
252268
{
269+
int err = errno;
253270
close(s);
254-
return -1;
271+
switch (err)
272+
{
273+
case 401:
274+
return -EACCES; /* No Access */
275+
276+
case 403:
277+
return -EACCES; /* No Access */
278+
279+
case 404:
280+
return -ENOENT;
281+
282+
case 500:
283+
return -EREMOTEIO; /* Server internal error */
284+
285+
default:
286+
return -EPROTO; /* Other protocol error */
287+
}
255288
}
256289

257290
/* Skip response header */
@@ -1809,11 +1842,15 @@ static int nxplayer_playinternal(FAR struct nxplayer_s *pplayer,
18091842
/* Test that the specified file exists */
18101843

18111844
#ifdef CONFIG_NXPLAYER_HTTP_STREAMING_SUPPORT
1812-
if ((pplayer->fd = _open_with_http(pfilename)) == -1)
1845+
pplayer->fd = _open_with_http(pfilename);
1846+
if (pplayer->fd < 0)
18131847
#else
1814-
if ((pplayer->fd = open(pfilename, O_RDONLY)) == -1)
1848+
pplayer->fd = open(pfilename, O_RDONLY);
1849+
if (pplayer->fd == -1)
18151850
#endif
18161851
{
1852+
int err = errno;
1853+
18171854
/* File not found. Test if its in the mediadir */
18181855

18191856
#ifdef CONFIG_NXPLAYER_INCLUDE_MEDIADIR
@@ -1827,19 +1864,21 @@ static int nxplayer_playinternal(FAR struct nxplayer_s *pplayer,
18271864
if (nxplayer_mediasearch(pplayer, pfilename, path,
18281865
sizeof(path)) != OK)
18291866
{
1830-
auderr("ERROR: Could not find file\n");
1831-
return -ENOENT;
1867+
auderr("ERROR: Media search failed for %s: %s\n",
1868+
pfilename, strerror(err));
1869+
return -err;
18321870
}
18331871
#else
1834-
auderr("ERROR: Could not open %s or %s\n", pfilename, path);
1835-
return -ENOENT;
1872+
auderr("ERROR: Could not open %s or %s: %s\n",
1873+
pfilename, path, strerror(err));
1874+
return -err;
18361875
#endif /* CONFIG_NXPLAYER_MEDIA_SEARCH */
18371876
}
18381877

18391878
#else /* CONFIG_NXPLAYER_INCLUDE_MEDIADIR */
18401879

1841-
auderr("ERROR: Could not open %s\n", pfilename);
1842-
return -ENOENT;
1880+
auderr("ERROR: Could not open %s: %s\n", pfilename, strerror(err));
1881+
return -err;
18431882
#endif /* CONFIG_NXPLAYER_INCLUDE_MEDIADIR */
18441883
}
18451884

system/nxplayer/nxplayer_main.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,22 @@ static int nxplayer_cmd_play(FAR struct nxplayer_s *pplayer, char *parg)
290290
printf("File %s not found\n", parg);
291291
break;
292292

293+
case ENETUNREACH:
294+
printf("DNS resolution failed\n");
295+
break;
296+
297+
case ETIMEDOUT:
298+
printf("Timeout\n");
299+
break;
300+
301+
case EACCES:
302+
printf("No access\n");
303+
break;
304+
305+
case ECONNREFUSED:
306+
printf("Connect refused\n");
307+
break;
308+
293309
case ENOSYS:
294310
printf("Unknown audio format\n");
295311
break;

0 commit comments

Comments
 (0)