4 * Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
5 * Copyright (c) 2002-2014, Professor Benoit Macq
6 * Copyright (c) 2010-2011, Kaori Hagihara
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in the
16 * documentation and/or other materials provided with the distribution.
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
19 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
22 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28 * POSSIBILITY OF SUCH DAMAGE.
34 #include "channel_manager.h"
36 #define snprintf _snprintf /* Visual Studio */
40 #include "fcgi_stdio.h"
41 #define logstream FCGI_stdout
43 #define FCGI_stdout stdout
44 #define FCGI_stderr stderr
45 #define logstream stderr
48 channellist_param_t * gene_channellist(void)
50 channellist_param_t *channellist;
52 channellist = (channellist_param_t *)opj_malloc(sizeof(channellist_param_t));
54 channellist->first = NULL;
55 channellist->last = NULL;
60 channel_param_t * gene_channel(query_param_t query_param,
61 auxtrans_param_t auxtrans, cachemodel_param_t *cachemodel,
62 channellist_param_t *channellist)
64 channel_param_t *channel;
65 const char transport[4][10] = { "non", "http", "http-tcp", "http-udp"};
68 fprintf(FCGI_stdout, "Status: 404\r\n");
69 fprintf(FCGI_stdout, "Reason: cnew cancelled\r\n");
73 channel = (channel_param_t *)opj_malloc(sizeof(channel_param_t));
74 channel->cachemodel = cachemodel;
76 /* set channel ID and get present time */
77 snprintf(channel->cid, MAX_LENOFCID, "%x%x",
78 (unsigned int)time(&channel->start_tm), (unsigned int)rand());
80 channel->aux = query_param.cnew;
82 /* only tcp implemented for now */
83 if (channel->aux == udp) {
89 set_channel_variable_param(query_param, channel);
91 if (channellist->first != NULL) {
92 channellist->last->next = channel;
94 channellist->first = channel;
96 channellist->last = channel;
98 fprintf(FCGI_stdout, "JPIP-cnew: cid=%s", channel->cid);
99 fprintf(FCGI_stdout, ",transport=%s", transport[channel->aux]);
101 if (channel->aux == tcp || channel->aux == udp) {
102 fprintf(FCGI_stdout, ",auxport=%d",
103 channel->aux == tcp ? auxtrans.tcpauxport : auxtrans.udpauxport);
106 fprintf(FCGI_stdout, "\r\n");
112 void set_channel_variable_param(query_param_t query_param,
113 channel_param_t *channel)
115 /* set roi information */
121 void delete_channel(channel_param_t **channel, channellist_param_t *channellist)
123 channel_param_t *ptr;
125 if (*channel == channellist->first) {
126 channellist->first = (*channel)->next;
128 ptr = channellist->first;
129 while (ptr->next != *channel) {
133 ptr->next = (*channel)->next;
135 if (*channel == channellist->last) {
136 channellist->last = ptr;
140 fprintf(logstream, "local log: channel: %s deleted\n", (*channel)->cid);
145 void delete_channellist(channellist_param_t **channellist)
147 channel_param_t *channelPtr, *channelNext;
149 channelPtr = (*channellist)->first;
150 while (channelPtr != NULL) {
151 channelNext = channelPtr->next;
153 fprintf(logstream, "local log: channel %s deleted!\n", channelPtr->cid);
155 opj_free(channelPtr);
156 channelPtr = channelNext;
158 opj_free(*channellist);
161 void print_allchannel(channellist_param_t *channellist)
163 channel_param_t *ptr;
165 ptr = channellist->first;
166 while (ptr != NULL) {
167 fprintf(logstream, "channel-ID=%s \t target=%s\n", ptr->cid,
168 ptr->cachemodel->target->targetname);
173 channel_param_t * search_channel(const char cid[],
174 channellist_param_t *channellist)
176 channel_param_t *foundchannel;
178 foundchannel = channellist->first;
180 while (foundchannel != NULL) {
182 if (strcmp(cid, foundchannel->cid) == 0) {
186 foundchannel = foundchannel->next;
188 fprintf(FCGI_stdout, "Status: 503\r\n");
189 fprintf(FCGI_stdout, "Reason: Channel %s not found in this session\r\n", cid);