Mercurial > pt1.oyama
comparison src/http.c @ 166:726fe10d9e4a
Code refactoring.
Change channel shuld be done in http_open().
Delete unnecessary code, variables.
author | Naoya OYAMA <naoya.oyama@gmail.com> |
---|---|
date | Tue, 02 Oct 2012 21:57:40 +0900 |
parents | 5d010d0ff6a1 |
children | 27e5f99f8991 |
comparison
equal
deleted
inserted
replaced
165:3ffef0e5b80a | 166:726fe10d9e4a |
---|---|
20 * with this program; if not, write to the Free Software Foundation, | 20 * with this program; if not, write to the Free Software Foundation, |
21 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. | 21 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
22 */ | 22 */ |
23 | 23 |
24 #include <sys/types.h> | 24 #include <sys/types.h> |
25 #include <sys/msg.h> | |
25 #include <sys/stat.h> | 26 #include <sys/stat.h> |
26 #include <fcntl.h> | 27 #include <fcntl.h> |
27 #include <errno.h> | 28 #include <errno.h> |
28 #include <stdio.h> | 29 #include <stdio.h> |
29 #include <stdlib.h> | 30 #include <stdlib.h> |
44 #include "presentation.h" | 45 #include "presentation.h" |
45 #include "osdep.h" | 46 #include "osdep.h" |
46 #include "mime.h" | 47 #include "mime.h" |
47 #include "recpt1.h" | 48 #include "recpt1.h" |
48 #include "tssplitter_lite.h" | 49 #include "tssplitter_lite.h" |
50 #include "pt1_common.h" | |
49 | 51 |
50 #define PROTOCOL_TYPE_PRE_SZ 11 /* for the str length of "http-get:*:" */ | 52 #define PROTOCOL_TYPE_PRE_SZ 11 /* for the str length of "http-get:*:" */ |
51 #define PROTOCOL_TYPE_SUFF_SZ 2 /* for the str length of ":*" */ | 53 #define PROTOCOL_TYPE_SUFF_SZ 2 /* for the str length of ":*" */ |
52 | 54 |
53 extern thread_data tdata; | 55 extern thread_data tdata; |
107 log_verbose ("http_get_info, filename : %s\n", filename); | 109 log_verbose ("http_get_info, filename : %s\n", filename); |
108 | 110 |
109 upnp_id = atoi (strrchr (filename, '/') + 1); | 111 upnp_id = atoi (strrchr (filename, '/') + 1); |
110 entry = upnp_get_entry (ut, upnp_id); | 112 entry = upnp_get_entry (ut, upnp_id); |
111 | 113 |
112 if (ut->nr_channel == 0) { | 114 for (i=0; i < ut->channel_list->nr_channel; i++) { |
113 if (!strcmp (filename, STREAM_LOCATION)) { | 115 if (!strcmp(filename, ut->channel_list->channel_info[i]->sid)) { |
114 log_verbose ("http_get_info, stream location found.\n"); | 116 log_verbose ("http_get_info, stream location found [%s].\n", filename); |
115 info->is_readable = 1; | 117 info->is_readable = 1; |
116 info->file_length = get_streaming_length(); | 118 info->file_length = get_streaming_length(); |
117 info->last_modified = time(NULL); | 119 info->last_modified = time(NULL); |
118 info->is_directory = 0; | 120 info->is_directory = 0; |
119 info->content_type = ixmlCloneDOMString ("video/mpeg"); | 121 info->content_type = ixmlCloneDOMString ("video/mpeg"); |
120 return 0; | 122 return 0; |
121 } | 123 } |
122 } else { | |
123 for (i=0; i < ut->nr_channel; i++) { | |
124 if (!strcmp(filename, ut->location_name[i])) { | |
125 log_verbose ("http_get_info, stream location found [%s].\n", filename); | |
126 info->is_readable = 1; | |
127 info->file_length = get_streaming_length(); | |
128 info->last_modified = time(NULL); | |
129 info->is_directory = 0; | |
130 info->content_type = ixmlCloneDOMString ("video/mpeg"); | |
131 return 0; | |
132 } | |
133 } | |
134 } | 124 } |
135 if (!strcmp (filename, CDS_LOCATION)) | 125 if (!strcmp (filename, CDS_LOCATION)) |
136 { | 126 { |
137 set_info_file (info, CDS_DESCRIPTION_LEN, SERVICE_CONTENT_TYPE); | 127 set_info_file (info, CDS_DESCRIPTION_LEN, SERVICE_CONTENT_TYPE); |
138 return 0; | 128 return 0; |
340 struct upnp_entry_t *entry = NULL; | 330 struct upnp_entry_t *entry = NULL; |
341 struct web_file_t *file; | 331 struct web_file_t *file; |
342 int i, fd, upnp_id = 0; | 332 int i, fd, upnp_id = 0; |
343 extern thread_data *gp_tdata; | 333 extern thread_data *gp_tdata; |
344 thread_data *tdata = gp_tdata; | 334 thread_data *tdata = gp_tdata; |
345 int channel_length = 0; | 335 pt1_message_buf mbuf; |
336 int msqid; | |
337 int msgflg = IPC_CREAT | 0666; | |
346 | 338 |
347 if (!filename) | 339 if (!filename) |
348 return NULL; | 340 return NULL; |
349 | 341 |
350 if (mode != UPNP_READ) | 342 if (mode != UPNP_READ) |
376 * 1. http_open() $B$G$O(B entry $B$,%9%H%j!<%`:F@8MQ$N$b$N$G$"$k>l9g$K!"(B | 368 * 1. http_open() $B$G$O(B entry $B$,%9%H%j!<%`:F@8MQ$N$b$N$G$"$k>l9g$K!"(B |
377 * get_file_stream()$B$r8F$S=P$7%O%s%I%i$rJV5Q$9$k(B | 369 * get_file_stream()$B$r8F$S=P$7%O%s%I%i$rJV5Q$9$k(B |
378 */ | 370 */ |
379 for (i=0; i < ut->channel_list->nr_channel; i++) { | 371 for (i=0; i < ut->channel_list->nr_channel; i++) { |
380 if (atoi(entry->fullpath) == ut->channel_list->channel_info[i]->id) { | 372 if (atoi(entry->fullpath) == ut->channel_list->channel_info[i]->id) { |
381 ut->sid = ut->channel_list->channel_info[i]->sid; | 373 if ((msqid = msgget((key_t)getpid(), msgflg)) < 0) { |
382 ut->tp = ut->channel_list->channel_info[i]->tp; | 374 // $B%(%i!<;~$O%A%c%s%M%kJQ99%j%/%(%9%H$O$J$+$C$?$3$H$K$9$k(B |
383 return get_file_stream (ut->sid, tdata); | 375 fprintf(stderr, "msgget error.\n"); |
376 } | |
377 mbuf.mtype = 1; | |
378 snprintf(mbuf.mtext, sizeof(mbuf.mtext), | |
379 "ch=%s t=%d e=%d i=%s", | |
380 ut->channel_list->channel_info[i]->tp, | |
381 0, | |
382 0, | |
383 ut->channel_list->channel_info[i]->sid); | |
384 if (msgsnd(msqid, &mbuf, strlen(mbuf.mtext)+1, IPC_NOWAIT) < 0) { | |
385 fprintf(stderr, "msgsend error.\n"); | |
386 } | |
387 return get_file_stream (ut->channel_list->channel_info[i]->sid, tdata); | |
384 } | 388 } |
385 } | 389 } |
386 | 390 |
387 fd = open (entry->fullpath, O_RDONLY | O_NONBLOCK | O_SYNC | O_NDELAY); | 391 fd = open (entry->fullpath, O_RDONLY | O_NONBLOCK | O_SYNC | O_NDELAY); |
388 if (fd < 0) | 392 if (fd < 0) |