source: titan/titan/httpdfunc.h @ 15345

Last change on this file since 15345 was 15345, checked in by nit, 10 years ago

[titan] extend html api

File size: 74.1 KB
Line 
1#ifndef HTTPDFUNC_H
2#define HTTPDFUNC_H
3
4time_t webcreatetimeline(char** buf, int* maxlen, int* pos)
5{
6        int i = 0;
7        struct tm *loctime = NULL;
8        int timeadd = 15 * 60;
9        char* buf1 = NULL;
10        time_t akttimeadd = 0;
11
12#ifdef SIMULATE
13        time_t akttime = 1307871000;
14        akttime = 1315614961;
15#else
16        time_t akttime = time(NULL);
17#endif
18
19        akttime -= (((akttime) % 100));
20        akttime -= (((akttime / 60) % 15) * 60);
21        akttimeadd = akttime;
22
23        buf1 = malloc(6);
24        if(buf1 == NULL)
25        {
26                err("no mem");
27                return akttime;
28        }
29
30        //not shown
31        ostrcatbig(buf, "<th class=gepgchannel1> </th><th style=\"width: 1px; max-width: 1px; min-width: 1px;\"></th>", maxlen, pos);
32        for(i = 0; i < 96; i++)
33        {
34                loctime = olocaltime(&akttimeadd);
35                if(loctime != NULL)
36                        strftime(buf1, 6, "%H:%M", loctime);
37                else
38                        snprintf(buf1, 6, "00:00");
39                free(loctime); loctime = NULL;
40
41                ostrcatbig(buf, "<th class=gepgtimelinecell><div class=gepgcellborder>", maxlen, pos);
42                ostrcatbig(buf, buf1, maxlen, pos);
43                ostrcatbig(buf, "</div></th>", maxlen, pos);
44
45                akttimeadd += timeadd;
46        }
47
48        free(buf1);
49        return akttime / 60;
50}
51
52void webcreatetailbig(char** buf, int* maxlen, int* pos, int flag)
53{
54        ostrcatbig(buf, "</table></font></center></body></html>", maxlen, pos);
55}
56
57
58char* webcreatetail(char* buf, int flag)
59{
60        buf = ostrcat(buf, "</table></font></center></body></html>", 1, 0);
61        return buf;
62}
63
64void webcreateheadbig(char** buf, int* maxlen, char* meta, int* pos, int flag)
65{
66        ostrcatbig(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=stylesheet type=text/css href=titan.css>", maxlen, pos);
67        if(meta != NULL)
68                ostrcatbig(buf, meta, maxlen, pos);
69        ostrcatbig(buf, "</head><body class=body>", maxlen, pos);
70        if(flag == 0)
71                ostrcatbig(buf, "<center><table border=0 width=100%>", maxlen, pos);
72        else
73                ostrcatbig(buf, "<center><table border=0 width=100% height=100%>", maxlen, pos);
74}
75
76char* webcreatehead(char* buf, char* meta, int flag)
77{
78        buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=stylesheet type=text/css href=titan.css>", 1, 0);
79        if(meta != NULL)
80                buf = ostrcat(buf, meta, 1, 0);
81        buf = ostrcat(buf, "</head><body class=body>", 1, 0);
82        if(flag == 0)
83                buf = ostrcat(buf, "<center><table border=0 width=100%>", 1, 0);
84        else
85                buf = ostrcat(buf, "<center><table border=0 width=100% height=100%>", 1, 0);
86        return buf;
87}
88
89void webcreatechannelbody(char** buf, int line, struct channel* chnode, char* channellist, int* maxlen, int* pos, int flag, int fmt)
90{
91        char* tmpstr = NULL, *buf1 = NULL, *serviceid = NULL, *transponderid = NULL;
92        struct epg* epgnode = getepgakt(chnode);
93        int ret = 0, proz = 0;
94        struct tm *loctime = NULL;
95        time_t max = 0, akt = 0;
96
97        if(chnode == NULL) return;
98        ret = channelnottunable(chnode);
99
100        buf1 = malloc(MINMALLOC);
101        if(buf1 == NULL)
102        {
103                err("no mem");
104                return;
105        }
106
107        if(fmt == 0)
108        {
109                if(line == 0)
110                        ostrcatbig(buf, "<tr class=line1>", maxlen, pos);
111                else
112                        ostrcatbig(buf, "<tr class=line2>", maxlen, pos);
113        }
114
115        if(epgnode != NULL)
116        {
117                proz = (time(NULL) - epgnode->starttime) * 100 / (epgnode->endtime - epgnode->starttime);
118                if(proz > 100) proz = 100;
119                if(proz < 0) proz = 0;
120        }
121
122        if(fmt == 0)
123        {
124                ostrcatbig(buf, "<td width=100% valign=middle nowrap class=link><div class=timelineborder><div class=timelinebar style=\"width: ", maxlen, pos);
125                tmpstr = oitoa(proz);
126                ostrcatbig(buf, tmpstr, maxlen, pos);
127                free(tmpstr); tmpstr = NULL;
128                ostrcatbig(buf, "%;\"> </div></div>", maxlen, pos);
129        }
130
131        serviceid = oitoa(chnode->serviceid);
132        transponderid = olutoa(chnode->transponderid);
133
134        if(fmt == 0 && ret == 0)
135        {
136                ostrcatbig(buf, "<a target=aktservice class=link href=query?switch&", maxlen, pos);
137                ostrcatbig(buf, serviceid, maxlen, pos);
138                ostrcatbig(buf, "&", maxlen, pos);
139                ostrcatbig(buf, transponderid, maxlen, pos);
140                ostrcatbig(buf, "&", maxlen, pos);
141                ostrcatbig(buf, channellist, maxlen, pos);
142                ostrcatbig(buf, ">", maxlen, pos);
143        }
144
145        if(fmt == 0)
146        {
147                ostrcatbig(buf, chnode->name, maxlen, pos);
148                if(ret == 0)
149                        ostrcatbig(buf, "</a>", maxlen, pos);
150        }
151        else
152        {
153                *buf = ostrcat(*buf, chnode->name, 1, 0);
154                *buf = ostrcat(*buf, "#", 1, 0);
155                *buf = ostrcat(*buf, oitoa(proz), 1, 1);
156                *buf = ostrcat(*buf, "#", 1, 0);
157                *buf = ostrcat(*buf, serviceid, 1, 0);
158                *buf = ostrcat(*buf, "#", 1, 0);
159                *buf = ostrcat(*buf, transponderid, 1, 0);
160                *buf = ostrcat(*buf, "#", 1, 0);
161                *buf = ostrcat(*buf, channellist, 1, 0);
162                *buf = ostrcat(*buf, "#", 1, 0);
163                *buf = ostrcat(*buf, oitoa(chnode->servicetype), 1, 1);
164                *buf = ostrcat(*buf, "#", 1, 0);
165                if(epgnode != NULL)
166                        *buf = ostrcat(*buf, oitoa(epgnode->eventid), 1, 1);
167                else
168                        *buf = ostrcat(*buf, "0", 1, 0);
169                *buf = ostrcat(*buf, "\n", 1, 0);
170        }
171
172        //akt epg
173        if(fmt == 0 && epgnode != NULL)
174        {
175                if(flag == 0)
176                        ostrcatbig(buf, "<br><a target=main class=smalllink href=query?getepg&", maxlen, pos);
177                else
178                        ostrcatbig(buf, " <a target=main class=smalllink href=query?getepg&", maxlen, pos);
179
180                ostrcatbig(buf, serviceid, maxlen, pos);
181                ostrcatbig(buf, "&", maxlen, pos);
182                ostrcatbig(buf, transponderid, maxlen, pos);
183                ostrcatbig(buf, "&", maxlen, pos);
184                tmpstr = oitoa(epgnode->eventid);
185                ostrcatbig(buf, tmpstr, maxlen, pos);
186                free(tmpstr); tmpstr = NULL;
187                ostrcatbig(buf, ">", maxlen, pos);
188
189                loctime = olocaltime(&epgnode->starttime);
190                if(loctime != NULL)
191                        strftime(buf1, MINMALLOC, "%H:%M -", loctime);
192                free(loctime); loctime = NULL;
193                loctime = olocaltime(&epgnode->endtime);
194                if(loctime != NULL)
195                        strftime(&buf1[7], MINMALLOC - 8, " %H:%M ", loctime);
196                free(loctime); loctime = NULL;
197
198                ostrcatbig(buf, buf1, maxlen, pos);
199                ostrcatbig(buf, epgnode->title, maxlen, pos);
200
201                max = (epgnode->endtime - epgnode->starttime) / 60;
202                akt = (time(NULL) - epgnode->starttime) / 60;
203                if(max < 0) max = 0;
204                if(akt < 0) akt = 0;
205                snprintf(buf1, MINMALLOC, " (%ld from %ld min, %d%%)", akt, max, proz);
206                ostrcatbig(buf, buf1, maxlen, pos);
207
208                ostrcatbig(buf, "</a>", maxlen, pos);
209
210                //next epg
211                epgnode = epgnode->next;
212                if(flag == 0 && epgnode != NULL)
213                {
214                        ostrcatbig(buf, "<br><a target=main class=smalllink href=query?getepg&", maxlen, pos);
215                        ostrcatbig(buf, serviceid, maxlen, pos);
216                        ostrcatbig(buf, "&", maxlen, pos);
217                        ostrcatbig(buf, transponderid, maxlen, pos);
218                        ostrcatbig(buf, "&", maxlen, pos);
219                        tmpstr = oitoa(epgnode->eventid);
220                        ostrcatbig(buf, tmpstr, maxlen, pos);
221                        free(tmpstr); tmpstr = NULL;
222                        ostrcatbig(buf, ">", maxlen, pos);
223
224                        loctime = olocaltime(&epgnode->starttime);
225                        if(loctime != NULL)
226                                strftime(buf1, 8, "%H:%M -", loctime);
227                        free(loctime); loctime = NULL;
228                        loctime = olocaltime(&epgnode->endtime);
229                        if(loctime != NULL)
230                                strftime(&buf1[7], 8, " %H:%M ", loctime);
231                        free(loctime); loctime = NULL;
232
233                        ostrcatbig(buf, buf1, maxlen, pos);
234                        ostrcatbig(buf, epgnode->title, maxlen, pos);
235                        ostrcatbig(buf, "</a>", maxlen, pos);
236                }
237        }
238
239        //tv - radio
240        if(fmt == 0)
241        {
242                if(chnode->servicetype == 0)
243                        ostrcatbig(buf, "</td><td width=100 align=right valign=middle nowrap><img style=\"margin-left: 5\" border=0 src=img/tv.png alt=TV width=16 height=16>", maxlen, pos);
244                else
245                        ostrcatbig(buf, "</td><td width=100 align=right valign=middle nowrap><img style=\"margin-left: 5\" border=0 src=img/radio.png alt=Radio width=16 height=16>", maxlen, pos);
246
247                //single epg
248                ostrcatbig(buf, "<a target=main href=query?getsingleepg&", maxlen, pos);
249                ostrcatbig(buf, serviceid, maxlen, pos);
250                ostrcatbig(buf, "&", maxlen, pos);
251                ostrcatbig(buf, transponderid, maxlen, pos);
252                ostrcatbig(buf, "><img style=\"margin-left: 5\" border=0 src=img/singleepg.png alt=\"Single EPG\" width=16 height=16></a>", maxlen, pos);
253
254                //m3u stream + webstream
255                if(ret == 0)
256                {
257                        ostrcatbig(buf, "<a target=nothing href=query?getm3u&", maxlen, pos);
258                        ostrcatbig(buf, serviceid, maxlen, pos);
259                        ostrcatbig(buf, ",", maxlen, pos);
260                        ostrcatbig(buf, transponderid, maxlen, pos);
261                        ostrcatbig(buf, "><img style=\"margin-left: 5\" border=0 src=img/stream.png alt=Stream width=16 height=16></a>", maxlen, pos);
262
263                        ostrcatbig(buf, "<a target=_blank href=query?getvideo&", maxlen, pos);
264                        ostrcatbig(buf, serviceid, maxlen, pos);
265                        ostrcatbig(buf, ",", maxlen, pos);
266                        ostrcatbig(buf, transponderid, maxlen, pos);
267                        ostrcatbig(buf, "><img style=\"margin-left: 5\" border=0 src=img/webstream.png alt=WebStream width=16 height=16></a>", maxlen, pos);
268                }
269                else
270                        ostrcatbig(buf, "<img style=\"margin-left: 5\" border=0 src=img/cross.png alt=\"Channel not availabel\" width=16 height=16>", maxlen, pos);
271                ostrcatbig(buf, "</td></tr>", maxlen, pos);
272        }
273
274        free(buf1);
275        free(serviceid);
276        free(transponderid);
277}
278
279char* webgetbouquetchannel(char* param, int fmt)
280{
281        char* buf = NULL, *tmpstr = NULL, *tmpstr1 = NULL;
282        struct mainbouquet *mbouquet = NULL;
283        struct bouquet *node = NULL;
284        struct channel* chnode = NULL;
285        int line = 0, maxlen = 0, pos = 0;
286
287        if(param == NULL) return NULL;
288
289        if(fmt == 0) webcreateheadbig(&buf, &maxlen, "<meta http-equiv=refresh content=15>", &pos, 0);
290
291        mbouquet = getmainbouquet(param);
292        if(mbouquet != NULL)
293        {
294                node = mbouquet->bouquet;
295                tmpstr = ostrcat(tmpstr, "(BOUQUET)-", 1, 0);
296                tmpstr = ostrcat(tmpstr, mbouquet->name, 1, 0);
297                tmpstr1 = htmlencode(tmpstr);
298                free(tmpstr); tmpstr = NULL;
299                while(node != NULL)
300                {
301                        chnode = getchannel(node->serviceid, node->transponderid);
302                        if(chnode != NULL)
303                        {
304                                webcreatechannelbody(&buf, line, chnode, tmpstr1, &maxlen, &pos, 0, fmt);
305                                if(line == 0)
306                                        line = 1;
307                                else
308                                        line = 0;
309                        }
310                        node = node->next;
311                }
312                free(tmpstr1); tmpstr1 = NULL;
313        }
314        if(fmt == 0) webcreatetailbig(&buf, &maxlen, &pos, 0);
315
316        return buf;
317}
318
319//flag 0: all
320//flag 1: sat
321//flag 2: provider
322//flag 3: A-Z
323char* webgetchannel(int param, int flag, int page, int fmt)
324{
325        char* buf = NULL, *tmpnr = NULL, *tmpstr = NULL, *tmpstr1 = NULL;
326        struct channel* chnode = channel;
327        int line = 0, maxcount = 0, maxlen = 0, pos = 0;
328
329        if(fmt == 0) webcreateheadbig(&buf, &maxlen, "<meta http-equiv=refresh content=15>", &pos, 0);
330
331        if(flag == 0) tmpstr1 = ostrcat(tmpstr1, "(ALL)", 1, 0);
332        if(flag == 1)
333        {
334                struct sat* node = getsatbyorbitalpos(param);
335                if(node != NULL)
336                {
337                        tmpstr = ostrcat(tmpstr, "(SAT)-", 1, 0);
338                        tmpstr = ostrcat(tmpstr, node->name, 1, 0);
339                        tmpstr1 = htmlencode(tmpstr);
340                        free(tmpstr); tmpstr = NULL;
341                }
342        }
343        if(flag == 2)
344        {
345                struct provider* node = getprovider(param);
346                if(node != NULL)
347                {
348                        tmpstr = ostrcat(tmpstr, "(PROVIDER)-", 1, 0);
349                        tmpstr = ostrcat(tmpstr, node->name, 1, 0);
350                        tmpstr1 = htmlencode(tmpstr);
351                        free(tmpstr); tmpstr = NULL;
352                }
353        }
354        if(flag == 3)
355        {
356                tmpstr = malloc(2);
357                if(tmpstr != NULL)
358                        snprintf(tmpstr, 2, "%c", param);
359                tmpstr = ostrcat("(A-Z)-", tmpstr, 0, 1);
360                tmpstr1 = htmlencode(tmpstr);
361                free(tmpstr); tmpstr = NULL;
362        }
363
364        while(chnode != NULL)
365        {
366                if(chnode->transponder == NULL)
367                {
368                        chnode = chnode->next;
369                        continue;
370                }
371                if(chnode->name == NULL)
372                {
373                        chnode = chnode->next;
374                        continue;
375                }
376                if(flag == 1 && chnode->transponder->orbitalpos != param)
377                {
378                        chnode = chnode->next;
379                        continue;
380                }
381                if(flag == 2 && chnode->providerid != param)
382                {
383                        chnode = chnode->next;
384                        continue;
385                }
386                if(flag == 3 && chnode->name[0] != param && chnode->name[0] != param + 32)
387                {
388                        chnode = chnode->next;
389                        continue;
390                }
391
392                maxcount++;
393                if(maxcount <= (MAXHTMLLINE * page) - MAXHTMLLINE || maxcount > MAXHTMLLINE * page)
394                {
395                        chnode = chnode->next;
396                        continue;
397                }
398                webcreatechannelbody(&buf, line, chnode, tmpstr1, &maxlen, &pos, 0, fmt);
399
400                if(line == 0)
401                        line = 1;
402                else
403                        line = 0;
404
405                chnode = chnode->next;
406        }
407        free(tmpstr); tmpstr = NULL;
408
409        if(fmt == 0 && maxcount > MAXHTMLLINE)
410        {
411                int i;
412                ostrcatbig(&buf, "<tr><td align=center><br>", &maxlen, &pos);
413                for(i = 1; i <= (int)ceil(((float)maxcount / MAXHTMLLINE)); i++)
414                {
415                        if(page == i)
416                                ostrcatbig(&buf, "<a class=pagesellink href=query?getchannelpage&", &maxlen, &pos);
417                        else
418                                ostrcatbig(&buf, "<a class=pagelink href=query?getchannelpage&", &maxlen, &pos);
419                        tmpnr = oitoa(param);
420                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
421                        ostrcatbig(&buf, "&", &maxlen, &pos);
422                        free(tmpnr); tmpnr = NULL;
423                        tmpnr = oitoa(flag);
424                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
425                        ostrcatbig(&buf, "&", &maxlen, &pos);
426                        free(tmpnr); tmpnr = NULL;
427
428                        tmpnr = oitoa(i);
429                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
430                        ostrcatbig(&buf, ">", &maxlen, &pos);
431                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
432                        ostrcatbig(&buf, "</a>", &maxlen, &pos);
433                        free(tmpnr); tmpnr = NULL;
434                }
435                ostrcatbig(&buf, "</td></tr>", &maxlen, &pos);
436        }
437
438        if(fmt == 0) webcreatetailbig(&buf, &maxlen, &pos, 0);
439        return buf;
440}
441
442char* webgetprovider(int fmt)
443{
444        char* buf = NULL, *tmpstr = NULL;
445        struct provider* node = provider;
446        int line = 0, maxlen = 0, pos = 0;
447
448        if(fmt == 0) webcreateheadbig(&buf, &maxlen, NULL, &pos, 0);
449
450        while(node != NULL)
451        {
452                if(fmt == 0)
453                {
454                        if(line == 0)
455                        {
456                                ostrcatbig(&buf, "<tr class=line1><td nowrap><a class=link href=\"query?getproviderchannel&", &maxlen, &pos);
457                                tmpstr = oitoa(node->providerid);
458                                ostrcatbig(&buf, tmpstr, &maxlen, &pos);
459                                free(tmpstr); tmpstr = NULL;
460                                ostrcatbig(&buf, "\">", &maxlen, &pos);
461                                line = 1;
462                        }
463                        else
464                        {
465                                ostrcatbig(&buf, "<tr class=line2><td nowrap><a class=link href=\"query?getproviderchannel&", &maxlen, &pos);
466                                tmpstr = oitoa(node->providerid);
467                                ostrcatbig(&buf, tmpstr, &maxlen, &pos);
468                                free(tmpstr); tmpstr = NULL;
469                                ostrcatbig(&buf, "\">", &maxlen, &pos);
470                                line = 0;
471                        }
472                        ostrcatbig(&buf, node->name, &maxlen, &pos);
473                        ostrcatbig(&buf, "</td></tr>", &maxlen, &pos);
474                }
475                else
476                {
477                        buf = ostrcat(buf, node->name, 1, 0);
478                        buf = ostrcat(buf, "#", 1, 0);
479                        buf = ostrcat(buf, oitoa(node->providerid), 1, 1);
480                        buf = ostrcat(buf, "\n", 1, 0);
481                }
482
483                node = node->next;
484        }
485
486        if(fmt == 0) webcreatetailbig(&buf, &maxlen, &pos, 0);
487        return buf;
488}
489
490char* webgetsat(int fmt)
491{
492        char* buf = NULL, *tmpstr = NULL;
493        struct sat* node = sat;
494        int line = 0, maxlen = 0, pos = 0;
495
496        if(fmt == 0) webcreateheadbig(&buf, &maxlen, NULL, &pos, 0);
497
498        while(node != NULL)
499        {
500                if(fmt == 0)
501                {
502                        if(line == 0)
503                        {
504                                ostrcatbig(&buf, "<tr class=line1><td nowrap><a class=link href=\"query?getsatchannel&", &maxlen, &pos);
505                                tmpstr = oitoa(node->orbitalpos);
506                                ostrcatbig(&buf, tmpstr, &maxlen, &pos);
507                                free(tmpstr); tmpstr = NULL;
508                                ostrcatbig(&buf, "\">", &maxlen, &pos);
509                                line = 1;
510                        }
511                        else
512                        {
513                                ostrcatbig(&buf, "<tr class=line2><td nowrap><a class=link href=\"query?getsatchannel&", &maxlen, &pos);
514                                tmpstr = oitoa(node->orbitalpos);
515                                ostrcatbig(&buf, tmpstr, &maxlen, &pos);
516                                free(tmpstr); tmpstr = NULL;
517                                ostrcatbig(&buf, "\">", &maxlen, &pos);
518                                line = 0;
519                        }
520                        ostrcatbig(&buf, node->name, &maxlen, &pos);
521                        ostrcatbig(&buf, "</td></tr>", &maxlen, &pos);
522                }
523                else
524                {
525                        buf = ostrcat(buf, node->name, 1, 0);
526                        buf = ostrcat(buf, "#", 1, 0);
527                        buf = ostrcat(buf, oitoa(node->orbitalpos), 1, 1);
528                        buf = ostrcat(buf, "\n", 1, 0);
529                }
530
531                node = node->next;
532        }
533
534        if(fmt == 0) webcreatetailbig(&buf, &maxlen, &pos, 0);
535        return buf;
536}
537
538char* webgetaz(int fmt)
539{
540        char* buf = NULL, *tmpstr = NULL, *tmpnr = NULL;
541        int line = 0, maxlen = 0, pos = 0, i;
542
543        tmpstr = malloc(2);
544        if(tmpstr == NULL)
545        {
546                err("no memory");
547                return NULL;
548        }
549
550        if(fmt == 0) webcreateheadbig(&buf, &maxlen, NULL, &pos, 0);
551
552        for(i = 65; i < 91; i++)
553        {
554                if(fmt == 0)
555                {
556                        if(line == 0)
557                        {
558                                ostrcatbig(&buf, "<tr class=line1><td nowrap><a class=link href=\"query?getazchannel&", &maxlen, &pos);
559                                tmpnr = oitoa(i);
560                                ostrcatbig(&buf, tmpnr, &maxlen, &pos);
561                                free(tmpnr); tmpnr = NULL;
562                                ostrcatbig(&buf, "\">", &maxlen, &pos);
563                                line = 1;
564                        }
565                        else
566                        {
567                                ostrcatbig(&buf, "<tr class=line2><td nowrap><a class=link href=\"query?getazchannel&", &maxlen, &pos);
568                                tmpnr = oitoa(i);
569                                ostrcatbig(&buf, tmpnr, &maxlen, &pos);
570                                free(tmpnr); tmpnr = NULL;
571                                ostrcatbig(&buf, "\">", &maxlen, &pos);
572                                line = 0;
573                        }
574                        snprintf(tmpstr, 2, "%c", i);
575                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
576                        ostrcatbig(&buf, "</td></tr>", &maxlen, &pos);
577                }
578                else
579                {
580                        snprintf(tmpstr, 2, "%c", i);
581                        buf = ostrcat(buf, tmpstr, 1, 0);
582                        buf = ostrcat(buf, "\n", 1, 0);
583                }
584        }
585
586        if(fmt == 0) webcreatetailbig(&buf, &maxlen, &pos, 0);
587        free(tmpstr);
588        return buf;
589}
590
591char* webgetbouquet(int fmt)
592{
593        char* buf = NULL;
594        struct mainbouquet* node = mainbouquet;
595        int line = 0, maxlen = 0, pos = 0;
596
597        if(fmt == 0) webcreateheadbig(&buf, &maxlen, NULL, &pos, 0);
598
599        while(node != NULL)
600        {
601                if(fmt == 0)
602                {
603                        if(line == 0)
604                        {
605                                ostrcatbig(&buf, "<tr class=line1><td width=100% nowrap><a class=link href=\"query?getbouquetchannel&", &maxlen, &pos);
606                                ostrcatbig(&buf, node->name, &maxlen, &pos);
607                                ostrcatbig(&buf, "\">", &maxlen, &pos);
608                                line = 1;
609                        }
610                        else
611                        {
612                                ostrcatbig(&buf, "<tr class=line2><td width=100% nowrap><a class=link href=\"query?getbouquetchannel&", &maxlen, &pos);
613                                ostrcatbig(&buf, node->name, &maxlen, &pos);
614                                ostrcatbig(&buf, "\">", &maxlen, &pos);
615                                line = 0;
616                        }
617                        ostrcatbig(&buf, node->name, &maxlen, &pos);
618                        ostrcatbig(&buf, "</a></td>", &maxlen, &pos);
619
620                        ostrcatbig(&buf, "<td width=50 nowrap align=right valign=middle><img style=\"margin-left: 5\" border=0 src=", &maxlen, &pos);
621
622                        if(node->type == 0)
623                                ostrcatbig(&buf, "img/tv.png width=16 height=16 alt=TV>", &maxlen, &pos);
624                        else
625                                ostrcatbig(&buf, "img/radio.png width=16 height=16 alt=Radio>", &maxlen, &pos);
626                        ostrcatbig(&buf, "<a href=\"query?getgmultiepg&", &maxlen, &pos);
627                        ostrcatbig(&buf, node->name, &maxlen, &pos);
628                        ostrcatbig(&buf, "\">", &maxlen, &pos);
629                        ostrcatbig(&buf, "<img style=\"margin-left: 5\" border=0 width=16 height=16 alt=\"Graphical Multi EPG\" src=img/gmultiepg.png></a>", &maxlen, &pos);
630                        ostrcatbig(&buf, "</td></tr>", &maxlen, &pos);
631                }
632                else
633                {
634                        buf = ostrcat(buf, node->name, 1, 0);
635                        buf = ostrcat(buf, "#", 1, 0);
636                        buf = ostrcat(buf, oitoa(node->type), 1, 1);
637                        buf = ostrcat(buf, "\n", 1, 0);
638                }
639
640                node = node->next;
641        }
642
643        if(fmt == 0) webcreatetailbig(&buf, &maxlen, &pos, 0);
644        return buf;
645}
646
647char* websetmute(char* param, int fmt)
648{
649        char* buf = NULL;
650        int mute = status.mute;
651
652        if(param != NULL)
653                mute = atoi(param);
654
655        if(fmt == 0)
656        {
657                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=stylesheet type=text/css href=titan.css></head><body class=body><center>", 1, 0);
658                if(mute == 0)
659                        buf = ostrcat(buf, "<a href=query?setmute&1><img src=img/speak_on.png border=0 alt=\"Mute on\"></img></a>", 1, 0);
660                else
661                        buf = ostrcat(buf, "<a href=query?setmute&0><img src=img/speak_off.png border=0 alt=\"Mute off\"></img></a>", 1, 0);
662                buf = ostrcat(buf, "</center></body></html>", 1, 0);
663        }
664        else
665        {
666                if(mute == 0)
667                        buf = ostrcat(buf, "0", 1, 0);
668                else
669                        buf = ostrcat(buf, "1", 1, 0);
670        }
671
672        if(mute != status.mute)
673                screenmute(NULL, NULL, 0);
674       
675        return buf;
676}
677
678char* websetvol(char* param, int fmt)
679{
680        char* buf = NULL;
681        int vol = 30;
682
683        if(param == NULL)
684                vol = getvol();
685        else
686                vol = atoi(param);
687
688        if(fmt == 0)
689        {
690                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=stylesheet type=text/css href=titan.css></head><body class=body><center>", 1, 0);
691                if(vol >=10)
692                        buf = ostrcat(buf, "<a href=query?setvol&10><img src=img/led_on.png border=0></img></a> ", 1, 0);
693                else
694                        buf = ostrcat(buf, "<a href=query?setvol&10><img src=img/led_off.png border=0></img></a> ", 1, 0);
695                if(vol >=20)
696                        buf = ostrcat(buf, "<a href=query?setvol&20><img src=img/led_on.png border=0></img></a> ", 1, 0);
697                else
698                        buf = ostrcat(buf, "<a href=query?setvol&20><img src=img/led_off.png border=0></img></a> ", 1, 0);
699                if(vol >=30)
700                        buf = ostrcat(buf, "<a href=query?setvol&30><img src=img/led_on.png border=0></img></a> ", 1, 0);
701                else
702                        buf = ostrcat(buf, "<a href=query?setvol&30><img src=img/led_off.png border=0></img></a> ", 1, 0);
703                if(vol >=40)
704                        buf = ostrcat(buf, "<a href=query?setvol&40><img src=img/led_on.png border=0></img></a> ", 1, 0);
705                else
706                        buf = ostrcat(buf, "<a href=query?setvol&40><img src=img/led_off.png border=0></img></a> ", 1, 0);
707                if(vol >=50)
708                        buf = ostrcat(buf, "<a href=query?setvol&50><img src=img/led_on.png border=0></img></a> ", 1, 0);
709                else
710                        buf = ostrcat(buf, "<a href=query?setvol&50><img src=img/led_off.png border=0></img></a> ", 1, 0);
711                if(vol >=60)
712                        buf = ostrcat(buf, "<a href=query?setvol&60><img src=img/led_on.png border=0></img></a> ", 1, 0);
713                else
714                        buf = ostrcat(buf, "<a href=query?setvol&60><img src=img/led_off.png border=0></img></a> ", 1, 0);
715                if(vol >=70)
716                        buf = ostrcat(buf, "<a href=query?setvol&70><img src=img/led_on.png border=0></img></a> ", 1, 0);
717                else
718                        buf = ostrcat(buf, "<a href=query?setvol&70><img src=img/led_off.png border=0></img></a> ", 1, 0);
719                if(vol >=80)
720                        buf = ostrcat(buf, "<a href=query?setvol&80><img src=img/led_on.png border=0></img></a> ", 1, 0);
721                else
722                        buf = ostrcat(buf, "<a href=query?setvol&80><img src=img/led_off.png border=0></img></a> ", 1, 0);
723                if(vol >=90)
724                        buf = ostrcat(buf, "<a href=query?setvol&90><img src=img/led_on.png border=0></img></a> ", 1, 0);
725                else
726                        buf = ostrcat(buf, "<a href=query?setvol&90><img src=img/led_off.png border=0></img></a> ", 1, 0);
727                if(vol >=100)
728                        buf = ostrcat(buf, "<a href=query?setvol&100><img src=img/led_on.png border=0></img></a> ", 1, 0);
729                else
730                        buf = ostrcat(buf, "<a href=query?setvol&100><img src=img/led_off.png border=0></img></a> ", 1, 0);
731                buf = ostrcat(buf, "</center></body></html>", 1, 0);
732        }
733        else
734                buf = ostrcat(buf, oitoa(vol), 1, 1);
735
736        if(param != NULL)
737        {
738                setvol(vol);
739                if(status.mute == 1)
740                        screenmute(NULL, NULL, 0);
741        }
742        return buf;
743}
744
745char* webgetaktservice(int fmt)
746{
747        char* buf = NULL;
748        struct channel* chnode = status.aktservice->channel;
749        int line = 0, maxlen = 0, pos = 0;
750
751        if(fmt == 0) webcreateheadbig(&buf, &maxlen, NULL, &pos, 1);
752        webcreatechannelbody(&buf, line, chnode, getconfig("channellist", NULL), &maxlen, &pos ,1, fmt);
753        if(fmt == 0) webcreatetailbig(&buf, &maxlen, &pos, 1);
754
755        return buf;
756}
757
758char* webswitch(char* param, int fmt)
759{
760        if(status.channelswitch == 1) goto end;
761
762        int ret = 0;
763        char* param1 = NULL, *param2 = NULL;
764        struct channel* chnode = NULL;
765
766        if(param == NULL) goto end;
767
768        //create param1
769        param1 = strchr(param, '&');
770        if(param1 != NULL)
771        {
772                *param1++ = '\0';
773                param2 = strchr(param1, '&');
774                if(param2 != NULL)
775                        *param2++ = '\0';
776        }
777
778        if(param1 == NULL && param2 == NULL) goto end;
779
780        chnode = getchannel(atoi(param), atoi(param1));
781        if(chnode != NULL)
782        {
783                ret = channelnottunable(chnode);
784                if(ret == 0)
785                        ret = servicestart(chnode, param2, NULL, 0);
786        }
787
788end:
789        return webgetaktservice(fmt);
790}
791
792char* webgetm3u(char* param, int connfd, int fmt)
793{
794        char* buf = NULL, *ip = NULL, *tmpbuf = NULL;
795        struct sockaddr_in sin;
796        socklen_t len = sizeof(sin);
797
798        if(param == NULL) return NULL;
799
800        if(getsockname(connfd, &sin, &len) < 0)
801        {
802                perr("getsockname");
803                return NULL;
804        }
805
806        ip = inet_ntoa(sin.sin_addr);
807        if(ip == NULL) return NULL;
808
809        buf = ostrcat(buf, "#EXTM3U\n", 1, 0);
810        buf = ostrcat(buf, "#EXTVLCOPT--http-reconnect=true\n", 1, 0);
811        buf = ostrcat(buf, "http://", 1, 0);
812        buf = ostrcat(buf, ip, 1, 0);
813        buf = ostrcat(buf, ":", 1, 0);
814        buf = ostrcat(buf, getconfig("streamport", NULL), 1, 0);
815        buf = ostrcat(buf, "/", 1, 0);
816
817        tmpbuf = htmlencode(param);
818        if(tmpbuf != NULL)
819                param = tmpbuf;
820
821        buf = ostrcat(buf, param, 1, 0);
822        free(tmpbuf); tmpbuf = NULL;
823
824        return buf;
825}
826
827char* webgetvideo(char* param, int connfd, int fmt)
828{
829        char* buf = NULL, *ip = NULL, *tmpbuf = NULL;
830        struct sockaddr_in sin;
831        socklen_t len = sizeof(sin);
832
833        if(param == NULL) return NULL;
834
835        if(getsockname(connfd, &sin, &len) < 0)
836        {
837                perr("getsockname");
838                return NULL;
839        }
840
841        ip = inet_ntoa(sin.sin_addr);
842        if(ip == NULL) return NULL;
843
844        if(fmt == 0)
845        {
846                buf = ostrcat(buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=stylesheet type=text/css href=titan.css></head><body class=body><table border=0 width=100% height=100%><tr><td align=center valign=middle>", 1, 0);
847                buf = ostrcat(buf, "<embed width=100% height=100% type=application/x-vlc-plugin name=video autoplay=yes target=\"http://", 1, 0);
848        }
849        else
850                buf = ostrcat(buf, "http://", 1, 0);
851
852        buf = ostrcat(buf, ip, 1, 0);
853        buf = ostrcat(buf, ":", 1, 0);
854        buf = ostrcat(buf, getconfig("streamport", NULL), 1, 0);
855        buf = ostrcat(buf, "/", 1, 0);
856
857        tmpbuf = htmlencode(param);
858        if(tmpbuf != NULL)
859                param = tmpbuf;
860
861        buf = ostrcat(buf, param, 1, 0);
862        free(tmpbuf); tmpbuf = NULL;
863
864        if(fmt == 0)
865        {
866                buf = ostrcat(buf, "\" />", 1, 0);
867                //buf = ostrcat(buf, "<a href=javascript:; onclick='document.video.play()'>Play</a>", 1, 0);
868                //buf = ostrcat(buf, "<a href=javascript:; onclick='document.video.stop()'>Stop</a>", 1, 0);
869                //buf = ostrcat(buf, "<a href=javascript:; onclick='document.video.fullscreen()'>Fullscreen</a>", 1, 0);
870                buf = ostrcat(buf, "</td></tr></body></html>", 1, 0);
871        }
872
873        return buf;
874}
875
876char* webgetchannelpage(char* param, int fmt)
877{
878        char* param1 = NULL, *param2 = NULL;
879
880        if(param == NULL) return NULL;
881
882        //create param1 + 2
883        param1 = strchr(param, '&');
884        if(param1 != NULL)
885        {
886                *param1++ = '\0';
887                param2 = strchr(param1, '&');
888                if(param2 != NULL)
889                        *param2++ = '\0';
890        }
891
892        if(param1 == NULL || param2 == NULL) return NULL;
893
894        return webgetchannel(atoi(param), atoi(param1), atoi(param2), fmt);
895}
896
897void webmessage(struct stimerthread* timernode, char* text, int flag)
898{
899        textbox(_("Message"), text, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 200, 0, 0);
900        free(text);
901}
902
903char* websendmessage(char* param, int fmt)
904{
905        char* text = NULL, *buf = NULL;
906
907        if(param == NULL) return NULL;
908        param = strchr(param, '=');
909        if(param != NULL)
910        {
911                param++;
912                stringreplacechar(param, '+', ' ');
913                text = ostrcat(text, param, 1, 0);
914        }
915        addtimer(&webmessage, START, 1000, 1, (void*)text, NULL, NULL);
916
917        if(fmt == 0)
918        {
919                buf = webcreatehead(buf, NULL, 1);
920                buf = ostrcat(buf, "<tr><td align=center valign=top><font class=biglabel><br><br>Message Send !!!</font></td></tr>", 1, 0);
921                buf = webcreatetail(buf, 1);
922        }
923        else
924                buf = ostrcat(buf, "Message Send", 1, 0);
925               
926        return buf;
927}
928
929char* webgetsignal(int fmt)
930{
931        char* buf = NULL, *tmpnr = NULL;
932        uint16_t snr = 0, signal = 0;
933        uint32_t ber = 0, unc = 0;
934
935        ber = fereadber(status.aktservice->fedev);
936        unc = fereaduncorrectedblocks(status.aktservice->fedev);
937        signal = fereadsignalstrength(status.aktservice->fedev);
938        snr = fereadsnr(status.aktservice->fedev);
939        snr = (snr * 100) / 0xffff;
940
941        if(fmt == 0)
942        {
943                buf = webcreatehead(buf, "<meta http-equiv=refresh content=1>", 0);
944
945                buf = ostrcat(buf, "<tr><td align=center><font class=biglabel><br><br>BER: ", 1, 0);
946                tmpnr = oitoa(ber);
947                buf = ostrcat(buf, tmpnr, 1, 0);
948                free(tmpnr); tmpnr = NULL;
949
950                buf = ostrcat(buf, "<br>UNC: ", 1, 0);
951                tmpnr = oitoa(unc);
952                buf = ostrcat(buf, tmpnr, 1, 0);
953                free(tmpnr); tmpnr = NULL;
954
955                buf = ostrcat(buf, "<br>SIG: ", 1, 0);
956                tmpnr = oitoa(signal);
957                buf = ostrcat(buf, tmpnr, 1, 0);
958                free(tmpnr); tmpnr = NULL;
959
960                buf = ostrcat(buf, "<br>SNR: ", 1, 0);
961                tmpnr = oitoa(snr);
962                buf = ostrcat(buf, tmpnr, 1, 0);
963                free(tmpnr); tmpnr = NULL;
964
965                buf = ostrcat(buf, "</font></td></tr>", 1, 0);
966                buf = webcreatetail(buf, 0);
967        }
968        else
969        {
970                buf = ostrcat(buf, oitoa(ber), 1, 1);
971                buf = ostrcat(buf, "#", 1, 0);
972                buf = ostrcat(buf, oitoa(unc), 1, 1);
973                buf = ostrcat(buf, "#", 1, 0);
974                buf = ostrcat(buf, oitoa(signal), 1, 1);
975                buf = ostrcat(buf, "#", 1, 0);
976                buf = ostrcat(buf, oitoa(snr), 1, 1);
977        }
978
979        return buf;
980}
981
982char* webgetepg(char* param, int fmt)
983{
984        char* buf = NULL, *buf1 = NULL, *tmpstr = NULL, *param1 = NULL, *param2 = NULL;
985        struct epg* epgnode = NULL;
986        struct channel* chnode = NULL;
987        struct tm *loctime = NULL;
988
989        if(param == NULL) return NULL;
990
991        //create param1 + 2
992        param1 = strchr(param, '&');
993        if(param1 != NULL)
994        {
995                *param1++ = '\0';
996                param2 = strchr(param1, '&');
997                if(param2 != NULL)
998                        *param2++ = '\0';
999        }
1000
1001        if(param1 == NULL || param2 == NULL) return NULL;
1002
1003        chnode = getchannel(atoi(param), atoi(param1));
1004        if(chnode == NULL) return NULL;
1005
1006        epgnode = getepg(chnode, atoi(param2), 0);
1007        if(epgnode == NULL) return NULL;
1008
1009        if(fmt == 0) buf = webcreatehead(buf, NULL, 0);
1010
1011        buf1 = malloc(MINMALLOC);
1012        if(buf1 == NULL)
1013        {
1014                err("no mem");
1015                return buf;
1016        }
1017
1018        if(fmt == 0) buf = ostrcat(buf, "<tr><td><font class=biglabel>", 1, 0);
1019        if(epgnode->title != NULL)
1020        {
1021                buf = ostrcat(buf, epgnode->title, 1, 0);
1022                if(fmt == 0)
1023                {
1024                        buf = ostrcat(buf, " (", 1, 0);
1025                        loctime = olocaltime(&epgnode->starttime);
1026                        if(loctime != NULL)
1027                                strftime(buf1, MINMALLOC, "%H:%M -", loctime);
1028                        free(loctime); loctime = NULL;
1029                        loctime = olocaltime(&epgnode->endtime);
1030                        if(loctime != NULL)
1031                                strftime(&buf1[7], MINMALLOC - 8, " %H:%M", loctime);
1032                        free(loctime); loctime = NULL;
1033                        buf = ostrcat(buf, buf1, 1, 0);
1034                        buf = ostrcat(buf, ")", 1, 0);
1035                }
1036        }
1037        if(fmt == 0)
1038        {
1039                buf = ostrcat(buf, "<br><br></font></td></tr>", 1, 0);
1040                buf = ostrcat(buf, "<tr><td><font class=label>", 1, 0);
1041        }
1042        else
1043        {
1044                buf = ostrcat(buf, "#", 1, 0);
1045                buf = ostrcat(buf, olutoa(epgnode->starttime), 1, 1);
1046                buf = ostrcat(buf, "#", 1, 0);
1047                buf = ostrcat(buf, olutoa(epgnode->endtime), 1, 1);
1048                buf = ostrcat(buf, "#", 1, 0);
1049        }
1050
1051        if(epgnode->subtitle != NULL)
1052                buf = ostrcat(buf, epgnode->subtitle, 1, 0);
1053
1054        if(fmt == 0)
1055        {
1056                buf = ostrcat(buf, "<br><br></font></td></tr>", 1, 0);
1057                buf = ostrcat(buf, "<tr><td><font class=label>", 1, 0);
1058        }
1059        else
1060                buf = ostrcat(buf, "#", 1, 0);
1061
1062        tmpstr = epgdescunzip(epgnode);
1063        if(tmpstr != NULL)
1064                buf = ostrcat(buf, tmpstr, 1, 0);
1065        free(tmpstr); tmpstr = NULL;
1066
1067        if(fmt == 0)
1068        {
1069                buf = ostrcat(buf, "</font></td></tr>", 1, 0);
1070                buf = webcreatetail(buf, 0);
1071        }
1072
1073        free(buf1);
1074        return buf;
1075}
1076
1077char* webgetsingleepg(char* param, int fmt)
1078{
1079        int line = 0, maxlen = 0, pos = 0;
1080        char* buf = NULL, *buf1 = NULL, *buf2 = NULL, *param1 = NULL, *tmpstr = NULL;
1081        struct epg* epgnode = NULL;
1082        struct channel* chnode = NULL;
1083        struct tm *loctime = NULL;
1084
1085        //create param1
1086        param1 = strchr(param, '&');
1087        if(param1 != NULL)
1088                *param1++ = '\0';
1089
1090        if(param1 == NULL) return NULL;
1091
1092        chnode = getchannel(atoi(param), atoi(param1));
1093        if(chnode == NULL) return NULL;
1094        epgnode = getepgakt(chnode);;
1095
1096        if(fmt == 0) webcreateheadbig(&buf, &maxlen, NULL, &pos, 0);
1097
1098        buf1 = malloc(MINMALLOC);
1099        if(buf1 == NULL)
1100        {
1101                err("no mem");
1102                return buf;
1103        }
1104
1105        while(epgnode != NULL)
1106        {
1107                if(fmt == 0)
1108                {
1109                        if(line == 0)
1110                        {
1111                                ostrcatbig(&buf, "<tr class=line1>", &maxlen, &pos);
1112                                line = 1;
1113                        }
1114                        else
1115                        {
1116                                ostrcatbig(&buf, "<tr class=line2>", &maxlen, &pos);
1117                                line = 0;
1118                        }
1119
1120                        ostrcatbig(&buf, "<td nowrap><a target=main class=link href=query?getepg&", &maxlen, &pos);
1121                        tmpstr = oitoa(chnode->serviceid);
1122                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1123                        buf2 = ostrcat("<td nowrap><a target=main class=link href=query?addrectimer&",tmpstr, 0, 0);
1124                        buf2 = ostrcat(buf2, "&", 0, 0);
1125                        free(tmpstr); tmpstr = NULL;
1126                        ostrcatbig(&buf, "&", &maxlen, &pos);
1127                        tmpstr = olutoa(chnode->transponderid);
1128                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1129                        buf2 = ostrcat(buf2, tmpstr, 0, 0);
1130                        buf2 = ostrcat(buf2, "&", 0, 0);
1131                        free(tmpstr); tmpstr = NULL;
1132                        ostrcatbig(&buf, "&", &maxlen, &pos);
1133                        tmpstr = oitoa(epgnode->eventid);
1134                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1135                        buf2 = ostrcat(buf2, tmpstr, 0, 0);
1136                        buf2 = ostrcat(buf2, ">", 0, 0);
1137                        free(tmpstr); tmpstr = NULL;
1138                        ostrcatbig(&buf, ">", &maxlen, &pos);
1139
1140                        loctime = olocaltime(&epgnode->starttime);
1141                        if(loctime != NULL)
1142                        strftime(buf1, MINMALLOC, "%d.%m _ %H:%M __ ", loctime);
1143                        //strftime(buf1, MINMALLOC, "%H:%M -", loctime);
1144                        free(loctime); loctime = NULL;
1145                        //loctime = olocaltime(&epgnode->endtime);
1146                        //if(loctime != NULL)
1147                        //      strftime(&buf1[7], MINMALLOC - 8, " %H:%M ", loctime);
1148                        //free(loctime); loctime = NULL;
1149                        ostrcatbig(&buf, buf1, &maxlen, &pos);
1150                        ostrcatbig(&buf, " ", &maxlen, &pos);
1151                        ostrcatbig(&buf, epgnode->title, &maxlen, &pos);
1152                        if(epgnode->subtitle != NULL)
1153                        {
1154                                ostrcatbig(&buf, " (", &maxlen, &pos);
1155                                ostrcatbig(&buf, epgnode->subtitle, &maxlen, &pos);
1156                                ostrcatbig(&buf, ")", &maxlen, &pos);
1157                        }
1158
1159                        ostrcatbig(&buf, "</a></td>", &maxlen, &pos);
1160                        ostrcatbig(&buf, buf2, &maxlen, &pos);
1161                        ostrcatbig(&buf, "<img border=0 width=16 height=16 src=img/timer.png alt=\"set timer\"/>", &maxlen, &pos);
1162                        ostrcatbig(&buf, "</a></td></tr>", &maxlen, &pos);
1163                }
1164                else
1165                {
1166                        buf = ostrcat(buf, epgnode->title, 1, 0);
1167                        buf = ostrcat(buf, "#", 1, 0);
1168                        buf = ostrcat(buf, olutoa(epgnode->starttime), 1, 1);
1169                        buf = ostrcat(buf, "#", 1, 0);
1170                        buf = ostrcat(buf, olutoa(epgnode->endtime), 1, 1);
1171                        buf = ostrcat(buf, "#", 1, 0);
1172                        buf = ostrcat(buf, epgnode->subtitle, 1, 0);
1173                        buf = ostrcat(buf, "\n", 1, 0);
1174                }
1175       
1176                epgnode = epgnode->next;
1177                free(buf2); buf2 = NULL;
1178        }
1179
1180        if(fmt == 0) webcreatetailbig(&buf, &maxlen, &pos, 0);
1181
1182        free(buf1);
1183        return buf;
1184}
1185
1186//TODO: create rectimer line
1187void webcalcrecline(char** buf, int* maxlen, int* pos)
1188{
1189        //ostrcatbig(buf, "<table border=0 cellpadding=0 cellspacing=0 style=\"table-layout: fixed\"><tr><td width=500 style=\"background-color: c0c0c0; height: 2; border-left: 2px solid #303030;\"></td></tr></table>", maxlen, pos);
1190}
1191
1192char* webgetgmultiepg(char* param, int fmt)
1193{
1194        int page = 1, i, line = 0, treffer = 0, maxlen = 0, pos = 0;
1195        char* buf = NULL, *tmpnr = NULL, *param1 = NULL;
1196        struct mainbouquet *mbouquet = NULL;
1197        struct bouquet *node = NULL;
1198        struct channel* chnode = NULL;
1199        struct epg* epgnode = NULL;
1200        time_t akttime = 0, difftime = 0, starttime = 0, endtime = 0, lastendtime = 0;
1201
1202        if(param == NULL) return NULL;
1203
1204        //create param1
1205        param1 = strchr(param, '&');
1206        if(param1 != NULL)
1207                *param1++ = '\0';
1208
1209        if(param1 != NULL) page = atoi(param1);
1210
1211        ostrcatbig(&buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script></head><body class=body><center><table width=100% height=100%><tr><td height=100%><table cellpadding=0 cellspacing=0 border=0 id=gmultiepg class=scrolltable style=\"table-layout: fixed;\" cellpadding=0><thead><tr>", &maxlen, &pos);
1212
1213        akttime = webcreatetimeline(&buf, &maxlen, &pos);
1214        akttime += ((page - 1) * 1440);
1215        ostrcatbig(&buf, "</tr></thead><tbody>", &maxlen, &pos);
1216
1217        mbouquet = getmainbouquet(param);
1218        if(mbouquet != NULL)
1219        {
1220                node = mbouquet->bouquet;
1221                while(node != NULL)
1222                {
1223                        chnode = getchannel(node->serviceid, node->transponderid);
1224                        if(chnode != NULL)
1225                        {
1226                                if(line == 0)
1227                                {
1228                                        ostrcatbig(&buf, "<tr><th class=gepgchannel1>", &maxlen, &pos);
1229                                        ostrcatbig(&buf, chnode->name, &maxlen, &pos);
1230                                        ostrcatbig(&buf, "</th><td class=gepgchannelcell colspan=1000>", &maxlen, &pos);
1231                                        webcalcrecline(&buf, &maxlen, &pos);
1232                                        ostrcatbig(&buf, "<table border=0 cellpadding=0 cellspacing=0 style=\"table-layout: fixed;\"><tr class=line1>", &maxlen, &pos);
1233                                        line = 1;
1234                                }
1235                                else
1236                                {
1237                                        ostrcatbig(&buf, "<tr><th class=gepgchannel2>", &maxlen, &pos);
1238                                        ostrcatbig(&buf, chnode->name, &maxlen, &pos);
1239                                        ostrcatbig(&buf, "</th><td class=gepgchannelcell colspan=1000>", &maxlen, &pos);
1240                                        webcalcrecline(&buf, &maxlen, &pos);
1241
1242                                        ostrcatbig(&buf, "<table border=0 cellpadding=0 cellspacing=0 style=\"table-layout: fixed;\"><tr class=line2>", &maxlen, &pos);
1243                                        line = 0;
1244                                }
1245
1246                                treffer = 0;
1247                                lastendtime = 0;
1248                                epgnode = getepgakt(chnode);
1249                                while(epgnode != NULL)
1250                                {
1251                                        treffer = 1;
1252                                        starttime = epgnode->starttime / 60;
1253                                        endtime = epgnode->endtime / 60;
1254
1255                                        if(endtime <= starttime || starttime >= akttime + 1440)
1256                                        {
1257                                                epgnode = epgnode->next;
1258                                                continue;
1259                                        }
1260
1261                                        //check if old endtime > new starttime
1262                                        if(lastendtime > 0 && starttime > lastendtime)
1263                                        {
1264                                                difftime = (starttime - lastendtime) * 5;
1265
1266                                                if(difftime <= 0)
1267                                                {
1268                                                        epgnode = epgnode->next;
1269                                                        continue;
1270                                                }
1271
1272                                                ostrcatbig(&buf, "<td class=gepgcellblank style=\"", &maxlen, &pos);
1273                                                tmpnr = oitoa(difftime);
1274                                                ostrcatbig(&buf, "width:", &maxlen, &pos);
1275                                                ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1276                                                ostrcatbig(&buf, "px;", &maxlen, &pos);
1277                                                ostrcatbig(&buf, "min-width:", &maxlen, &pos);
1278                                                ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1279                                                ostrcatbig(&buf, "px;", &maxlen, &pos);
1280                                                ostrcatbig(&buf, "max-width:", &maxlen, &pos);
1281                                                ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1282                                                ostrcatbig(&buf, "px;", &maxlen, &pos);
1283                                                free(tmpnr); tmpnr = NULL;
1284
1285                                                ostrcatbig(&buf, "\"> </td>", &maxlen, &pos);
1286                                        }
1287
1288                                        //check if starttime < last endtime
1289                                        if(starttime < lastendtime)
1290                                                starttime = lastendtime;
1291
1292                                        //check if endtime is in next day
1293                                        if(endtime > akttime + 1440)
1294                                                endtime = endtime - (endtime - (akttime + 1440));
1295
1296                                        //check if starttime is in prev day
1297                                        if(starttime < akttime)
1298                                                difftime = (endtime - akttime) * 5;
1299                                        else
1300                                                difftime = (endtime - starttime) * 5;
1301
1302                                        if(difftime <= 0)
1303                                        {
1304                                                epgnode = epgnode->next;
1305                                                continue;
1306                                        }
1307
1308                                        lastendtime = endtime;
1309
1310                                        ostrcatbig(&buf, "<td class=gepgcell style=\"", &maxlen, &pos);
1311                                        tmpnr = oitoa(difftime);
1312                                        ostrcatbig(&buf, "width:", &maxlen, &pos);
1313                                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1314                                        ostrcatbig(&buf, "px;", &maxlen, &pos);
1315                                        ostrcatbig(&buf, "min-width:", &maxlen, &pos);
1316                                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1317                                        ostrcatbig(&buf, "px;", &maxlen, &pos);
1318                                        ostrcatbig(&buf, "max-width:", &maxlen, &pos);
1319                                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1320                                        ostrcatbig(&buf, "px;", &maxlen, &pos);
1321                                        free(tmpnr); tmpnr = NULL;
1322
1323                                        ostrcatbig(&buf, "\"><div class=gepgcellborder>", &maxlen, &pos);
1324                                        ostrcatbig(&buf, epgnode->title, &maxlen, &pos);
1325                                        ostrcatbig(&buf, "</div></div></td>", &maxlen, &pos);
1326                                       
1327                                        epgnode = epgnode->next;
1328                                }
1329                                if(treffer == 0)
1330                                        ostrcatbig(&buf, "<td class=gepgcellblank> </td>", &maxlen, &pos);
1331                        }
1332                        ostrcatbig(&buf, "</tr></table></td></tr>", &maxlen, &pos);
1333
1334                        node = node->next;
1335                }
1336        }
1337        ostrcatbig(&buf, "<script type=text/javascript>if(typeof tableScroll == 'function'){tableScroll('gmultiepg');}</script></tbody></table></td></tr><tr><td align=center>", &maxlen, &pos);
1338
1339        for(i = 1; i <= 14; i++)
1340        {
1341                if(page == i)
1342                        ostrcatbig(&buf, "<a class=pagesellink href=\"query?getgmultiepg&", &maxlen, &pos);
1343                else
1344                        ostrcatbig(&buf, "<a class=pagelink href=\"query?getgmultiepg&", &maxlen, &pos);
1345                ostrcatbig(&buf, param, &maxlen, &pos);
1346                ostrcatbig(&buf, "&", &maxlen, &pos);
1347                tmpnr = oitoa(i);
1348                ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1349                ostrcatbig(&buf, "\">", &maxlen, &pos);
1350                ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1351                ostrcatbig(&buf, "</a>", &maxlen, &pos);
1352                free(tmpnr); tmpnr = NULL;
1353        }
1354       
1355        ostrcatbig(&buf, "</td></tr></table></center></body></html>", &maxlen, &pos);
1356        return buf;
1357}
1358
1359void webgetshoot(char* param, int fmt)
1360{
1361        char* cmd = NULL, *tmpstr = NULL;
1362
1363        if(status.aktservice->channel != NULL)
1364        {
1365                cmd = ostrcat(cmd, "grab.sh ", 1, 0);
1366                cmd = ostrcat(cmd, param, 1, 0);
1367                cmd = ostrcat(cmd, " ", 1, 0);
1368                cmd = ostrcat(cmd, getconfig("streamport", NULL), 1, 0);
1369                cmd = ostrcat(cmd, " ", 1, 0);
1370                tmpstr = oitoa(status.aktservice->channel->serviceid);
1371                cmd = ostrcat(cmd, tmpstr, 1, 0);
1372                free(tmpstr); tmpstr = NULL;
1373                cmd = ostrcat(cmd, ",", 1, 0);
1374                tmpstr = olutoa(status.aktservice->channel->transponderid);
1375                cmd = ostrcat(cmd, tmpstr, 1, 0);
1376                free(tmpstr); tmpstr = NULL;
1377                cmd = ostrcat(cmd, " titan", 1, 0);
1378        }
1379
1380        if(cmd != NULL)
1381                system(cmd);
1382        free(cmd);
1383}
1384
1385char* webgetepgsearch(char* query, char* param, int fmt)
1386{
1387        int line = 0, maxlen = 0, pos = 0, maxcount = 0, page = 1;
1388        char* buf = NULL, *buf1 = NULL, *buf2 = NULL, *tmpstr = NULL, *tmpnr = NULL, * param1 = NULL;
1389        struct channel* chnode = channel;
1390        struct epg* epgnode = NULL;
1391        struct tm *loctime = NULL;
1392
1393        if(query == NULL) return NULL;
1394
1395        if(param == NULL)
1396        {
1397                query = strchr(query, '=');
1398                if(query != NULL)
1399                {
1400                        query++;
1401                        stringreplacechar(param, '+', ' ');
1402                        param = query;
1403                }
1404        }
1405        else
1406        {
1407                //create param1
1408                param1 = strchr(param, '&');
1409                if(param1 != NULL)
1410                {
1411                        *param1++ = '\0';
1412                        page = atoi(param1);
1413                }       
1414        }
1415
1416        buf1 = malloc(MINMALLOC);
1417        if(buf1 == NULL)
1418        {
1419                err("no mem");
1420                return buf;
1421        }
1422
1423        if(fmt == 0) webcreateheadbig(&buf, &maxlen, NULL, &pos, 0);
1424        while(chnode != NULL)
1425        {
1426                epgnode = getepgakt(chnode);
1427                while(epgnode != NULL)
1428                {
1429                        if(epgnode->title != NULL && ostrstrcase(epgnode->title, param) != NULL)
1430                        {
1431
1432                                maxcount++;
1433                                if(maxcount <= (MAXHTMLLINE * page) - MAXHTMLLINE || maxcount > MAXHTMLLINE * page)
1434                                {
1435                                        epgnode = epgnode->next;
1436                                        continue;
1437                                }
1438
1439                                if(fmt == 0)
1440                                {
1441                                        if(line == 0)
1442                                        {
1443                                                ostrcatbig(&buf, "<tr class=line1>", &maxlen, &pos);
1444                                                line = 1;
1445                                        }
1446                                        else
1447                                        {
1448                                                ostrcatbig(&buf, "<tr class=line2>", &maxlen, &pos);
1449                                                line = 0;
1450                                        }
1451                                }
1452
1453                                if(fmt == 0)
1454                                {
1455                                        ostrcatbig(&buf, "<td nowrap><a target=main class=link href=query?getepg&", &maxlen, &pos);
1456                                        tmpstr = oitoa(chnode->serviceid);
1457                                        buf2 = ostrcat("<td nowrap><a target=main class=link href=query?addrectimer&", tmpstr, 0, 0);
1458                                        buf2 = ostrcat(buf2, "&", 0, 0);
1459                                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1460                                        free(tmpstr); tmpstr = NULL;
1461                                        ostrcatbig(&buf, "&", &maxlen, &pos);
1462                                        tmpstr = olutoa(chnode->transponderid);
1463                                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1464                                        buf2 = ostrcat(buf2, tmpstr, 0, 0);
1465                                        buf2 = ostrcat(buf2, "&", 0, 0);
1466                                        free(tmpstr); tmpstr = NULL;
1467                                        ostrcatbig(&buf, "&", &maxlen, &pos);
1468                                        tmpstr = oitoa(epgnode->eventid);
1469                                        ostrcatbig(&buf, tmpstr, &maxlen, &pos);
1470                                        buf2 = ostrcat(buf2, tmpstr, 0, 0);
1471                                        buf2 = ostrcat(buf2, ">", 0, 0);
1472                                        free(tmpstr); tmpstr = NULL;
1473                                        ostrcatbig(&buf, ">", &maxlen, &pos);
1474                                }
1475       
1476                                loctime = olocaltime(&epgnode->starttime);
1477                                if(loctime != NULL)
1478                                        strftime(buf1, MINMALLOC, "%d.%m _ %H:%M __ ", loctime);
1479                                        //strftime(buf1, MINMALLOC, "%H:%M -", loctime);
1480                                free(loctime); loctime = NULL;
1481                                //loctime = olocaltime(&epgnode->endtime);
1482                                //if(loctime != NULL)
1483                                //      strftime(&buf1[7], MINMALLOC - 8, " %H:%M ", loctime);
1484                                //free(loctime); loctime = NULL;
1485                                ostrcatbig(&buf, buf1, &maxlen, &pos);
1486                                ostrcatbig(&buf, " ", &maxlen, &pos);
1487       
1488                                ostrcatbig(&buf, epgnode->title, &maxlen, &pos);
1489                                if(chnode->name != NULL)
1490                                {
1491                                        ostrcatbig(&buf, " (", &maxlen, &pos);
1492                                        ostrcatbig(&buf, chnode->name, &maxlen, &pos);
1493                                        ostrcatbig(&buf, ")", &maxlen, &pos);
1494                                }
1495                                if(fmt == 0)
1496                                        ostrcatbig(&buf, "</a><br><font class=smalllabel1>", &maxlen, &pos);
1497                                else
1498                                        ostrcatbig(&buf, "#", &maxlen, &pos);
1499                                ostrcatbig(&buf, epgnode->subtitle, &maxlen, &pos);
1500                                if(fmt == 0)
1501                                {
1502                                        ostrcatbig(&buf, "</font></td>", &maxlen, &pos);
1503                                        ostrcatbig(&buf, buf2, &maxlen, &pos);
1504                                        ostrcatbig(&buf, "<img border=0 width=16 height=16 src=img/timer.png alt=\"set timer\"/>", &maxlen, &pos);
1505                                        ostrcatbig(&buf, "</a></td></tr>", &maxlen, &pos);
1506                                }
1507                                else
1508                                        ostrcatbig(&buf, "#", &maxlen, &pos);
1509                        }
1510                        epgnode = epgnode->next;
1511                        free(buf2); buf2 = NULL;
1512                }
1513                chnode = chnode->next;
1514        }
1515
1516        if(maxcount > MAXHTMLLINE && fmt == 0)
1517        {
1518                int i;
1519                ostrcatbig(&buf, "<tr><td align=center><br>", &maxlen, &pos);
1520                for(i = 1; i <= (int)ceil(((float)maxcount / MAXHTMLLINE)); i++)
1521                {
1522                        if(page == i)
1523                                ostrcatbig(&buf, "<a class=pagesellink href=query?getepgsearch&", &maxlen, &pos);
1524                        else
1525                                ostrcatbig(&buf, "<a class=pagelink href=query?getepgsearch&", &maxlen, &pos);
1526                        ostrcatbig(&buf, param, &maxlen, &pos);
1527                        ostrcatbig(&buf, "&", &maxlen, &pos);
1528                        free(tmpnr); tmpnr = NULL;
1529
1530                        tmpnr = oitoa(i);
1531                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1532                        ostrcatbig(&buf, ">", &maxlen, &pos);
1533                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1534                        ostrcatbig(&buf, "</a>", &maxlen, &pos);
1535                        free(tmpnr); tmpnr = NULL;
1536                }
1537                ostrcatbig(&buf, "</td></tr>", &maxlen, &pos);
1538        }
1539
1540        if(fmt == 0) webcreatetailbig(&buf, &maxlen, &pos, 0);
1541        free(buf1);
1542        return buf;
1543}
1544
1545//flagbit 0: restrict to path
1546//flagbit 1: show epg icon
1547//flagbit 2: show delete icon
1548//flagbit 3: show stream icon
1549//flagbit 4: show websteam icon
1550char* webgetfilelist(char* param, char* link, char* dellink, char* path, char* mask, int flag, int fmt)
1551{
1552        char* buf = NULL, *tmppath = NULL, *tmpnr = NULL, *param1 = NULL;
1553        int maxlen = 0, pos = 0, line = 0, maxcount = 0, page = 1;
1554        struct skin* webdir = getscreen("webdir");
1555        struct skin* filelist = getscreennode(webdir, "filelist");
1556        struct skin* filelistpath = getscreennode(webdir, "filelistpath");
1557        struct skin* node = NULL;
1558
1559        if(param == NULL) param = path;
1560
1561        //create param1
1562        param1 = strchr(param, '&');
1563        if(param1 != NULL)
1564                *param1++ = '\0';
1565
1566        if(param1 != NULL) page = atoi(param1);
1567
1568        if(strlen(param) == 0 || !isdir(param))
1569                tmppath = ostrcat(path, "", 0, 0);
1570        else
1571                tmppath = ostrcat(param, "", 0, 0);
1572
1573        char* tmppath1 = createpath(tmppath, "");
1574        free(tmppath); tmppath = tmppath1;
1575
1576        if(checkbit(flag, 0) == 1)
1577        {
1578                if(strstr(tmppath, path) != tmppath)
1579                {
1580                        free(tmppath); tmppath = NULL;
1581                        tmppath = ostrcat(path, "", 0, 0);
1582                }
1583        }
1584
1585        changemask(filelist, mask);
1586        changeinput(filelist, tmppath);
1587        changetext(filelistpath, filelist->input);
1588
1589        free(tmppath); tmppath = NULL;
1590
1591        delmarkedscreennodes(webdir, FILELISTDELMARK);
1592        createfilelist(webdir, filelist, 0);
1593
1594        if(fmt == 0) ostrcatbig(&buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script></head><body class=body><center><table width=100%>", &maxlen, &pos);
1595
1596        node = filelist;
1597        while(node != NULL)
1598        {
1599                if(node->del == FILELISTDELMARK)
1600                {
1601                        maxcount++;
1602                        if(maxcount <= (MAXHTMLLINE * page) - MAXHTMLLINE || maxcount > MAXHTMLLINE * page)
1603                        {
1604                                node = node->next;
1605                                continue;
1606                        }
1607
1608                        if(fmt == 0)
1609                        {
1610                                if(line == 0)
1611                                {
1612                                        ostrcatbig(&buf, "<tr class=line1>", &maxlen, &pos);
1613                                        line = 1;
1614                                }
1615                                else
1616                                {
1617                                        ostrcatbig(&buf, "<tr class=line2>", &maxlen, &pos);
1618                                        line = 0;
1619                                }
1620
1621                                ostrcatbig(&buf, "<td>", &maxlen, &pos);
1622                        }
1623                        if(node->input != NULL) //dir
1624                        {
1625                                if(fmt == 0)
1626                                {
1627                                        ostrcatbig(&buf, "<img border=0 width=16 height=16 src=img/folder.png alt=Directory> <a class=link href=\"query?", &maxlen, &pos);
1628                                        ostrcatbig(&buf, link, &maxlen, &pos);
1629                                        ostrcatbig(&buf, "&", &maxlen, &pos);
1630                                        ostrcatbig(&buf, node->input, &maxlen, &pos);
1631                                        ostrcatbig(&buf, "\">", &maxlen, &pos);
1632                                        ostrcatbig(&buf, node->text, &maxlen, &pos);
1633                                        ostrcatbig(&buf, "</a><td> </td>", &maxlen, &pos);
1634                                }
1635                                else
1636                                {
1637                                        ostrcatbig(&buf, node->text, &maxlen, &pos);
1638                                        ostrcatbig(&buf, "#0", &maxlen, &pos);
1639                                        ostrcatbig(&buf, "\n", &maxlen, &pos);
1640                                }
1641                        }
1642                        else
1643                        {
1644                                if(fmt == 0)
1645                                {
1646                                        ostrcatbig(&buf, "<font class=label1>", &maxlen, &pos);
1647                                        ostrcatbig(&buf, node->text, &maxlen, &pos);
1648                                        ostrcatbig(&buf, "</font></td>", &maxlen, &pos);
1649
1650                                        ostrcatbig(&buf, "<td width=80 align=right>", &maxlen, &pos);
1651
1652                                        //epg png
1653                                        if(checkbit(flag, 1) == 1)
1654                                        {
1655                                                ostrcatbig(&buf, "<a href=\"query?getmovieepg&", &maxlen, &pos);
1656                                                ostrcatbig(&buf, filelistpath->text, &maxlen, &pos);
1657                                                ostrcatbig(&buf, "/", &maxlen, &pos);
1658                                                ostrcatbig(&buf, node->text, &maxlen, &pos);
1659                                                ostrcatbig(&buf, "\">", &maxlen, &pos);
1660                                                ostrcatbig(&buf, "<img border=0 src=img/movieepg.png width=16 height=16 alt=EPG></a>", &maxlen, &pos);
1661                                        }
1662                                        //delete png
1663                                        if(checkbit(flag, 2) == 1)
1664                                        {
1665                                                ostrcatbig(&buf, "<img border=0 src=img/delete.png width=16 height=16 alt=Delete onclick='delquestion(\"", &maxlen, &pos);
1666                                                ostrcatbig(&buf, "query?", &maxlen, &pos);
1667                                                ostrcatbig(&buf, dellink, &maxlen, &pos);
1668                                                ostrcatbig(&buf, "&", &maxlen, &pos);
1669                                                ostrcatbig(&buf, filelistpath->text, &maxlen, &pos);
1670                                                ostrcatbig(&buf, "&", &maxlen, &pos);
1671                                                tmpnr = oitoa(page);
1672                                                ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1673                                                free(tmpnr); tmpnr = NULL;
1674                                                ostrcatbig(&buf, "&", &maxlen, &pos);
1675                                                ostrcatbig(&buf, node->text, &maxlen, &pos);
1676                                                ostrcatbig(&buf, "\");'>", &maxlen, &pos);
1677                                        }
1678                                        //stream png
1679                                        if(checkbit(flag, 3) == 1)
1680                                        {
1681                                                ostrcatbig(&buf, "<a target=nothing href=\"query?getm3u&0,0,", &maxlen, &pos);
1682                                                ostrcatbig(&buf, filelistpath->text, &maxlen, &pos);
1683                                                ostrcatbig(&buf, "/", &maxlen, &pos);
1684                                                ostrcatbig(&buf, node->text, &maxlen, &pos);
1685                                                ostrcatbig(&buf, "\">", &maxlen, &pos);
1686
1687                                                ostrcatbig(&buf, "<img border=0 src=img/stream.png width=16 height=16 alt=Stream></a>", &maxlen, &pos);
1688                                        }
1689                                        //webstream png
1690                                        if(checkbit(flag, 4) == 1)
1691                                        {
1692                                                ostrcatbig(&buf, "<a target=_blank href=\"query?getvideo&0,0,", &maxlen, &pos);
1693                                                ostrcatbig(&buf, filelistpath->text, &maxlen, &pos);
1694                                                ostrcatbig(&buf, "/", &maxlen, &pos);
1695                                                ostrcatbig(&buf, node->text, &maxlen, &pos);
1696                                                ostrcatbig(&buf, "\">", &maxlen, &pos);
1697
1698                                                ostrcatbig(&buf, "<img border=0 src=img/webstream.png width=16 height=16 alt=WebStream></a>", &maxlen, &pos);
1699
1700                                                ostrcatbig(&buf, "<a target=_blank href=\"", &maxlen, &pos);
1701                                                ostrcatbig(&buf, filelistpath->text, &maxlen, &pos);
1702                                                ostrcatbig(&buf, "/", &maxlen, &pos);
1703                                                ostrcatbig(&buf, node->text, &maxlen, &pos);
1704                                                ostrcatbig(&buf, "\">", &maxlen, &pos);
1705       
1706                                                ostrcatbig(&buf, "<img border=0 src=img/icon_restart.png width=16 height=16 alt=Download></a>", &maxlen, &pos);
1707                                        }
1708                                }
1709                                else
1710                                {
1711                                        ostrcatbig(&buf, node->text, &maxlen, &pos);
1712                                        ostrcatbig(&buf, "#1", &maxlen, &pos);
1713                                        ostrcatbig(&buf, "\n", &maxlen, &pos);
1714                                }
1715                        }
1716                        if(fmt == 0)
1717                        {
1718                                ostrcatbig(&buf, "</td>", &maxlen, &pos);
1719                                ostrcatbig(&buf, "</tr>", &maxlen, &pos);
1720                        }
1721                }
1722
1723                node = node->next;
1724        }
1725
1726        if(maxcount > MAXHTMLLINE)
1727        {
1728                int i;
1729                ostrcatbig(&buf, "<tr><td align=center><br>", &maxlen, &pos);
1730                for(i = 1; i <= (int)ceil(((float)maxcount / MAXHTMLLINE)); i++)
1731                {
1732                        if(page == i)
1733                        {
1734                                ostrcatbig(&buf, "<a class=pagesellink href=query?", &maxlen, &pos);
1735                                ostrcatbig(&buf, link, &maxlen, &pos);
1736                                ostrcatbig(&buf, "&", &maxlen, &pos);
1737                        }
1738                        else
1739                        {
1740                                ostrcatbig(&buf, "<a class=pagelink href=query?", &maxlen, &pos);
1741                                ostrcatbig(&buf, link, &maxlen, &pos);
1742                                ostrcatbig(&buf, "&", &maxlen, &pos);
1743                        }
1744                        ostrcatbig(&buf, param, &maxlen, &pos);
1745                        ostrcatbig(&buf, "&", &maxlen, &pos);
1746
1747                        tmpnr = oitoa(i);
1748                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1749                        ostrcatbig(&buf, ">", &maxlen, &pos);
1750                        ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1751                        ostrcatbig(&buf, "</a>", &maxlen, &pos);
1752                        free(tmpnr); tmpnr = NULL;
1753                }
1754                ostrcatbig(&buf, "</td></tr>", &maxlen, &pos);
1755        }
1756
1757        if(fmt == 0) webcreatetailbig(&buf, &maxlen, &pos, 0);
1758        delmarkedscreennodes(webdir, FILELISTDELMARK);
1759        return buf;
1760}
1761
1762char* webgetmovieepg(char* param, char* path, int flag, int fmt)
1763{
1764        char* buf = NULL, *tmpstr = NULL;
1765        char tstr[2];
1766        char c = 0;
1767        int first = 1, maxlen = 0, pos = 0;
1768        FILE* fd = NULL;
1769
1770        if(fmt == 0)
1771        {
1772                webcreateheadbig(&buf, &maxlen, NULL, &pos, 0);
1773                ostrcatbig(&buf, "<tr><td><font class=biglabel>", &maxlen, &pos);
1774        }
1775
1776        if(flag == 1)
1777        {
1778                if(param != NULL && strstr(param, path) == param)
1779                {
1780                        tmpstr = changefilenameext(param, ".epg");
1781                        fd = fopen(tmpstr, "r");
1782                }
1783        }
1784        else
1785        {
1786                tmpstr = changefilenameext(param, ".epg");
1787                fd = fopen(tmpstr, "r");
1788        }
1789
1790        if(fd != NULL)
1791        {
1792                while(c != EOF)
1793                {
1794                        c = fgetc(fd);
1795                        if(fmt == 0 && c == '\n')
1796                        {
1797                                if(first == 1)
1798                                {
1799                                        ostrcatbig(&buf, "</font><br><font class=label>", &maxlen, &pos);
1800                                        first = 0;
1801                                }
1802                                ostrcatbig(&buf, "<br>", &maxlen, &pos);
1803                                continue;
1804                        }
1805                        if(c != EOF)
1806                        {
1807                                sprintf(tstr, "%c", c);
1808                                ostrcatbig(&buf, tstr, &maxlen, &pos);
1809                        }
1810                }
1811                fclose(fd);
1812        }
1813
1814        if(fmt == 0)
1815        {
1816                ostrcatbig(&buf, "</font></td></tr>", &maxlen, &pos);
1817                webcreatetailbig(&buf, &maxlen, &pos, 0);
1818        }
1819
1820        free(tmpstr); tmpstr = NULL;
1821        return buf;
1822}
1823
1824char* webdelfile(char* param, char* link, char* dellink, char* path, char* mask, int flag, int fmt)
1825{
1826        char* buf = NULL, *param1 = NULL, *param2 = NULL, *tmpparam = NULL;
1827
1828        if(param == NULL) return NULL;
1829
1830        //create param1 + 2
1831        param1 = strchr(param, '&');
1832        if(param1 != NULL)
1833        {
1834                *param1++ = '\0';
1835                param2 = strchr(param1, '&');
1836                if(param2 != NULL)
1837                        *param2++ = '\0';
1838        }
1839
1840        if(param1 == NULL || param2 == NULL) return NULL;
1841
1842        tmpparam = createpath(param, param2);
1843
1844        if(checkbit(flag, 0) == 1)
1845        {
1846                if(tmpparam != NULL && strstr(tmpparam, path) == tmpparam)
1847                        unlink(tmpparam);
1848        }
1849        else
1850                unlink(tmpparam);
1851
1852        free(tmpparam); tmpparam = NULL;
1853        tmpparam = ostrcat(tmpparam, param, 1, 0);
1854        tmpparam = ostrcat(tmpparam, "&", 1, 0);
1855        tmpparam = ostrcat(tmpparam, param1, 1, 0);
1856
1857        buf = webgetfilelist(tmpparam, link, dellink, path, mask, flag, fmt);
1858        free(tmpparam); tmpparam = NULL;
1859        return buf;
1860}
1861
1862void websendrc(char* param, int fmt)
1863{
1864        int rccode = 0;
1865
1866        rccode = getrcconfigint(param, NULL);
1867        writerc(rccode);
1868}
1869
1870//flag 0: get aktiv timer
1871//flag 1: get old timer
1872char* webgetrectimer(char* param, int flag, int fmt)
1873{
1874        char* buf = NULL, *buf1 = NULL;
1875        struct rectimer* node = rectimer;
1876        struct channel* chnode = NULL;
1877        int line = 0, maxlen = 0, pos = 0;
1878        struct tm *loctime = NULL;
1879
1880        buf1 = malloc(MINMALLOC);
1881        if(buf1 == NULL)
1882        {
1883                err("no mem");
1884                return NULL;
1885        }
1886
1887        if(fmt == 0) ostrcatbig(&buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=stylesheet type=text/css href=titan.css><script type=text/javascript src=titan.js></script></head><body class=body><center><table width=100%>", &maxlen, &pos);
1888
1889        while(node != NULL)
1890        {
1891                if((flag == 0 && (node->status == 2 || node->status == 3)) || (flag == 1 && (node->status == 0 || node->status == 1)))
1892                {
1893                        node = node->next;
1894                        continue;
1895                }
1896                if(fmt == 0)
1897                {
1898                        if(line == 0)
1899                        {
1900                                ostrcatbig(&buf, "<tr class=line1><td>", &maxlen, &pos);
1901                                line = 1;
1902                        }
1903                        else
1904                        {
1905                                ostrcatbig(&buf, "<tr class=line2><td>", &maxlen, &pos);
1906                                line = 0;
1907                        }
1908
1909                        loctime = olocaltime(&node->begin);
1910                        if(loctime != NULL)
1911                                strftime(buf1, MINMALLOC, "%d-%m-%Y %H:%M -", loctime);
1912                        free(loctime); loctime = NULL;
1913                        loctime = olocaltime(&node->end);
1914                        if(loctime != NULL)
1915                                strftime(&buf1[18], MINMALLOC - 19, " %H:%M ", loctime);
1916                        free(loctime); loctime = NULL;
1917       
1918                        ostrcatbig(&buf, "<font class=label1>", &maxlen, &pos);
1919                        ostrcatbig(&buf, buf1, &maxlen, &pos);
1920
1921                        ostrcatbig(&buf, " (", &maxlen, &pos);
1922                        if(node->justplay == 0)
1923                                ostrcatbig(&buf, "rec - ", &maxlen, &pos);
1924                        else
1925                                ostrcatbig(&buf, "switch - ", &maxlen, &pos);
1926                        if(node->repeate == 0)
1927                                ostrcatbig(&buf, "once", &maxlen, &pos);
1928                        else
1929                                ostrcatbig(&buf, "repeate", &maxlen, &pos);
1930
1931                        ostrcatbig(&buf, ")</font><br><font class=smalllabel1>", &maxlen, &pos);
1932                        if(node->name == NULL || strlen(node->name) == 0)
1933                                ostrcatbig(&buf, "---", &maxlen, &pos);
1934                        else
1935                                ostrcatbig(&buf, node->name, &maxlen, &pos);
1936
1937                        chnode = getchannel(node->serviceid, node->transponderid);
1938                        if(chnode != NULL)
1939                        {
1940                                ostrcatbig(&buf, " (", &maxlen, &pos);
1941                                ostrcatbig(&buf, chnode->name, &maxlen, &pos);
1942                                ostrcatbig(&buf, ")", &maxlen, &pos);
1943                        }
1944                        ostrcatbig(&buf, "<br>", &maxlen, &pos);
1945
1946                        if(node->status == 0)
1947                                ostrcatbig(&buf, "waiting", &maxlen, &pos);
1948                        else if(node->status == 1)
1949                                ostrcatbig(&buf, "running", &maxlen, &pos);
1950                        else if(node->status == 2)
1951                                ostrcatbig(&buf, "succes", &maxlen, &pos);
1952                        else if(node->status == 3)
1953                        {
1954                                ostrcatbig(&buf, "error", &maxlen, &pos);
1955                                if(node->errstr != NULL && strlen(node->errstr) > 0)
1956                                {
1957                                        ostrcatbig(&buf, " (", &maxlen, &pos);
1958                                        ostrcatbig(&buf, node->errstr, &maxlen, &pos);
1959                                        ostrcatbig(&buf, ")", &maxlen, &pos);
1960                                }
1961                        }
1962
1963                        ostrcatbig(&buf, "</font>", &maxlen, &pos);
1964
1965                        if(flag == 0)
1966                        {
1967                                ostrcatbig(&buf, "</td><td width=40 align=right>", &maxlen, &pos);
1968
1969                                //edit png
1970                                ostrcatbig(&buf, "<a target=main href=\"query?editrectimer", &maxlen, &pos);
1971                                ostrcatbig(&buf, "&", &maxlen, &pos);
1972                                ostrcatbig(&buf, node->timestamp, &maxlen, &pos);
1973                                ostrcatbig(&buf, "\">", &maxlen, &pos);
1974
1975                                ostrcatbig(&buf, "<img border=0 src=img/edit.png width=16 height=16 alt=\"Edit Timer\"></a>", &maxlen, &pos);
1976
1977                                //delete png
1978                                ostrcatbig(&buf, "<img border=0 src=img/delete.png width=16 height=16 alt=Delete onclick='delquestion(\"", &maxlen, &pos);
1979                                ostrcatbig(&buf, "query?delrectimer", &maxlen, &pos);
1980                                ostrcatbig(&buf, "&", &maxlen, &pos);
1981                                ostrcatbig(&buf, node->timestamp, &maxlen, &pos);
1982                                //ostrcatbig(&buf, filelistpath->text, &maxlen, &pos);
1983                                //ostrcatbig(&buf, "&", &maxlen, &pos);
1984                                //tmpnr = oitoa(page);
1985                                //ostrcatbig(&buf, tmpnr, &maxlen, &pos);
1986                                //free(tmpnr); tmpnr = NULL;
1987                                //ostrcatbig(&buf, "&", &maxlen, &pos);
1988                                //ostrcatbig(&buf, node->text, &maxlen, &pos);
1989                                ostrcatbig(&buf, "\");'>", &maxlen, &pos);
1990                        }
1991
1992                        ostrcatbig(&buf, "</td></tr>", &maxlen, &pos);
1993                }
1994                else
1995                {
1996                        buf = ostrcat(buf, olutoa(node->begin), 1, 1);
1997                        buf = ostrcat(buf, "#", 1, 0);
1998                        buf = ostrcat(buf, olutoa(node->end), 1, 1);
1999                        buf = ostrcat(buf, "#", 1, 0);
2000                        buf = ostrcat(buf, oitoa(node->justplay), 1, 1);
2001                        buf = ostrcat(buf, "#", 1, 0);
2002                        buf = ostrcat(buf, oitoa(node->repeate), 1, 1);
2003                        buf = ostrcat(buf, "#", 1, 0);
2004                        buf = ostrcat(buf, node->name, 1, 0);
2005                        buf = ostrcat(buf, "#", 1, 0);
2006                        buf = ostrcat(buf, oitoa(node->serviceid), 1, 1);
2007                        buf = ostrcat(buf, "#", 1, 0);
2008                        buf = ostrcat(buf, olutoa(node->transponderid), 1, 1);
2009                        buf = ostrcat(buf, "#", 1, 0);
2010                        buf = ostrcat(buf, oitoa(node->status), 1, 1);
2011                        buf = ostrcat(buf, "#", 1, 0);
2012                        buf = ostrcat(buf, node->errstr, 1, 0);
2013                        buf = ostrcat(buf, "#", 1, 0);
2014                        buf = ostrcat(buf, node->timestamp, 1, 1);
2015                        buf = ostrcat(buf, "\n", 1, 0);
2016                }
2017
2018                node = node->next;
2019        }
2020
2021        if(fmt == 0) webcreatetailbig(&buf, &maxlen, &pos, 0);
2022
2023        free(buf1);
2024        return buf;
2025}
2026
2027char* webaddrectimer(char* param, int fmt)
2028{
2029        char* buf = NULL, *buf1 = NULL, *buf2 = NULL, *param1 = NULL, *param2 = NULL;
2030        struct channel* chnode = NULL;
2031        struct epg* epgnode = NULL;
2032//      int maxlen = 0, pos = 0, tmpservicetype = 0;
2033        int maxlen = 0, pos = 0;
2034        struct tm* loctime = NULL;
2035        time_t akttime = time(NULL);
2036       
2037        if(param != NULL)
2038        {
2039                //create param1 + 2
2040                param1 = strchr(param, '&');
2041                if(param1 != NULL)
2042                {
2043                        *param1++ = '\0';
2044                        param2 = strchr(param1, '&');
2045                        if(param2 != NULL)
2046                                *param2++ = '\0';
2047                }
2048                if(param1 == NULL || param2 == NULL) return NULL;
2049                chnode = getchannel(atoi(param), atoi(param1));
2050                if(chnode == NULL) return NULL;
2051
2052                epgnode = getepg(chnode, atoi(param2), 0);
2053                if(epgnode == NULL) return NULL;
2054        }
2055
2056               
2057        ostrcatbig(&buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=\"stylesheet\" type=\"text/css\" href=\"titan.css\"></head>", &maxlen, &pos);
2058        ostrcatbig(&buf, "<body class=body ><center>", &maxlen, &pos);
2059        ostrcatbig(&buf, "<form name=F1 action=query method=get><br><br>", &maxlen, &pos);
2060        ostrcatbig(&buf, "<input type=\"hidden\" name=\"rectimersend&node\" value=\"", &maxlen, &pos);
2061        ostrcatbig(&buf, "0", &maxlen, &pos);
2062        ostrcatbig(&buf, "\">", &maxlen, &pos);
2063        ostrcatbig(&buf, "<table border=\"0\"><tr>", &maxlen, &pos);
2064        ostrcatbig(&buf, "<td><font class=label>Name:&nbsp;</font></td>", &maxlen, &pos);
2065        ostrcatbig(&buf, "<td><input class=inputbox type=\"text\" name=\"name\" value=\"", &maxlen, &pos);
2066        if(epgnode != NULL)
2067                ostrcatbig(&buf, epgnode->title, &maxlen, &pos);
2068        else   
2069                ostrcatbig(&buf, " ", &maxlen, &pos);
2070        ostrcatbig(&buf, "\" /></td></tr>", &maxlen, &pos);
2071        ostrcatbig(&buf, "<td><font class=label>Type:&nbsp;</font></td>", &maxlen, &pos);
2072        ostrcatbig(&buf, "<td><select name=\"type\" border=0><option selected>", &maxlen, &pos);
2073        ostrcatbig(&buf, "record", &maxlen, &pos);
2074        ostrcatbig(&buf, "<option>record<option>switch channel</select></td></tr>", &maxlen, &pos);
2075
2076        buf2 = malloc(MINMALLOC);
2077        if(epgnode != NULL)
2078                loctime =       olocaltime(&epgnode->starttime);
2079        else
2080                loctime = olocaltime(&akttime);
2081        strftime(buf2, MINMALLOC, "%H:%M %d-%m-%Y", loctime);
2082        free(loctime); loctime = NULL;
2083
2084        buf1 = ostrcat(buf2, "", 0, 0);
2085        ostrcatbig(&buf, "<td><font class=label>Begin:&nbsp;</font></td>", &maxlen, &pos);
2086        ostrcatbig(&buf, "<td><input class=inputbox type=\"text\" name=\"begin\" value=\"", &maxlen, &pos);
2087        ostrcatbig(&buf, buf1, &maxlen, &pos);
2088        ostrcatbig(&buf, "\" /></td></tr>", &maxlen, &pos);
2089        free(buf1); buf1 = NULL;
2090       
2091        if(epgnode != NULL)
2092                loctime =       olocaltime(&epgnode->endtime);
2093        else
2094                loctime = olocaltime(&akttime);
2095        strftime(buf2, MINMALLOC, "%H:%M %d-%m-%Y", loctime);
2096        free(loctime); loctime = NULL;
2097       
2098        buf1 = ostrcat(buf2, "", 0, 0);
2099        ostrcatbig(&buf, "<td><font class=label>End:&nbsp;</font></td>", &maxlen, &pos);
2100        ostrcatbig(&buf, "<td><input class=inputbox type=\"text\" name=\"end\" value=\"", &maxlen, &pos);
2101        ostrcatbig(&buf, buf1, &maxlen, &pos);
2102        ostrcatbig(&buf, "\" /></td></tr>", &maxlen, &pos);
2103        free(buf1); buf1 = NULL;
2104        free(buf2); buf2 = NULL;
2105
2106        ostrcatbig(&buf, "<td><font class=label>Channel:&nbsp;</font></td>", &maxlen, &pos);
2107        ostrcatbig(&buf, "<td><input class=inputbox type=\"text\" name=\"channel\" value=\"", &maxlen, &pos);
2108        if(chnode != NULL)
2109                ostrcatbig(&buf, chnode->name, &maxlen, &pos);
2110        else if(status.aktservice->channel != NULL)
2111                ostrcatbig(&buf, status.aktservice->channel->name, &maxlen, &pos);
2112        ostrcatbig(&buf, "\" /></td></tr>", &maxlen, &pos);
2113        free(buf1); buf1 = NULL;
2114       
2115        ostrcatbig(&buf, "</table><br><br><input class=button type=submit name=send value=\"Send\" onClick=\"return checkdaytime(begin.value, end.value)\"></input>&nbsp;<input class=button type=reset name=reset value=\"Reset\"></input></form></center></body></html>", &maxlen, &pos);
2116
2117        //ostrcatbig(&buf, param, &maxlen, &pos);
2118        return buf;
2119}
2120
2121char* webrectimersend(char* param, int fmt)
2122{
2123        char* buf = NULL, *string = NULL, *name = NULL, *begin = NULL, *end = NULL, *type = NULL, *anode = NULL, *channelname = NULL, *sid = NULL, *tid = NULL, *ext = NULL;
2124//      int maxlen = 0, pos = 0, newnode = 0, channelfind = 0;
2125        int newnode = 0, channelfind = 0;
2126        struct rectimer *node = NULL;
2127        char* tmpstr = NULL;
2128        struct tm* loctime = NULL;
2129        struct channel *channel1 = NULL;
2130//      struct service *service1;
2131
2132        anode = strstr(param, "node=");
2133        if(anode != NULL)
2134                anode = anode + 5;
2135        name = strstr(param, "name=");
2136        if(name != NULL)
2137                name = name + 5;
2138        begin = strstr(param, "begin=");
2139        if(begin != NULL)
2140                begin = begin + 6;
2141        end = strstr(param, "end=");
2142        if(end != NULL)
2143                end = end + 4;
2144        type = strstr(param, "type=");
2145        if(type != NULL)
2146                type = type + 5;
2147        channelname = strstr(param, "channel=");
2148        if(channelname != NULL)
2149                channelname = channelname + 8;
2150        sid = strstr(param, "sid=");
2151        if(sid != NULL)
2152                sid = sid + 4;
2153        tid = strstr(param, "tid=");
2154        if(tid != NULL)
2155                tid = tid + 4;
2156        ext = strstr(param, "ext=");
2157        if(ext != NULL)
2158                ext = ext + 4;
2159       
2160        string = param;
2161        while(string != NULL)
2162        {       
2163                string = strchr(string, '&');
2164                if(string != NULL)
2165                        *string++ = '\0';
2166        }
2167       
2168        string = channelname;   
2169        while(string != NULL)
2170        {       
2171                string = strchr(string, '+');
2172                if(string != NULL)
2173                        *string++ = ' ';
2174        }
2175
2176        string = name; 
2177        while(string != NULL)
2178        {       
2179                string = strchr(string, '+');
2180                if(string != NULL)
2181                        *string++ = ' ';
2182        }
2183       
2184        if((sid == NULL && tid != NULL) || (sid != NULL && tid == NULL))
2185        {
2186                buf = ostrcat(buf, "ERROR: sid and tid required or only channel", 1, 0);       
2187                return buf;
2188        }
2189               
2190       
2191        if(channelname != NULL && sid == NULL)
2192        {
2193                channelfind = 0;
2194                channel1 = channel;
2195                while(channel1 != NULL)
2196                {
2197                        if(ostrcmp(channel1->name, channelname) == 0 && channel1->servicetype == 0) {
2198                                if(channelnottunable(channel1) == 0)
2199                                {
2200                                        channelfind = 1;
2201                                        break;
2202                                }
2203                        }
2204                        channel1 = channel1->next;
2205                }
2206                if(channelfind == 0)
2207                {
2208                        channel1 = channel;             
2209                        while(channel1 != NULL)
2210                        {
2211                                if(strstr(channel1->name, channelname) != NULL && channel1->servicetype == 0)
2212                                {
2213                                        if(channelnottunable(channel1) == 0)
2214                                        {
2215                                                channelfind = 1;
2216                                                break;
2217                                        }
2218                                }
2219                                channel1 = channel1->next;
2220                        }
2221                }
2222                if(channelfind == 0)
2223                {
2224                        buf = ostrcat(buf, "ERROR: channel not found", 1, 0);   
2225                        return buf;
2226                }
2227        }
2228       
2229        newnode = 0;
2230        node = getrectimerbytimestamp(anode);
2231        if(node == NULL)
2232        {
2233                node = addrectimernode(NULL, NULL);
2234                if(node != NULL)
2235                {
2236                        newnode = 1;
2237                        node->pincode = ostrcat("0000", NULL, 0, 0);
2238                        node->recpath = ostrcat(NULL, getconfig("rec_path", NULL), 0, 0);
2239                        node->afterevent = 0;
2240                        node->repeate = 0;
2241                }
2242        }
2243       
2244        if(node != NULL)
2245        {
2246                if(channelfind == 1 && channel1 != NULL)
2247                {
2248                        node->serviceid = channel1->serviceid;
2249                        node->servicetype = channel1->servicetype;
2250                        node->transponderid = channel1->transponderid;
2251                }
2252       
2253                if(sid != NULL && tid != NULL)
2254                {
2255                        node->serviceid = atoi(sid);
2256                        node->transponderid = atol(tid);
2257                        node->servicetype = 0;
2258                }
2259       
2260                free(node->name); node->name = NULL;
2261                node->name = ostrcat(name, "", 0, 0);
2262       
2263                if(ostrcmp(type, "record") == 0)
2264                        node->justplay = 0;
2265                else
2266                        node->justplay = 1;
2267       
2268                loctime = olocaltime(&node->begin);
2269                tmpstr = strptime(begin, "%H:%M+%d-%m-%Y", loctime);
2270                if(tmpstr != NULL)
2271                        node->begin = mktime(loctime);
2272                node->begin -= (node->begin % 60);
2273                tmpstr = NULL;
2274                free(loctime); loctime = NULL;
2275
2276                loctime = olocaltime(&node->end);
2277                tmpstr = strptime(end, "%H:%M+%d-%m-%Y", loctime);
2278                if(tmpstr != NULL)
2279                        node->end = mktime(loctime);
2280                node->end -= (node->end % 60);
2281                tmpstr = NULL;
2282                free(loctime); loctime = NULL;
2283
2284                if(newnode == 1)
2285                        node->disabled = 0;
2286       
2287                status.writerectimer = 1;
2288                writerectimer(getconfig("rectimerfile", NULL), 0);
2289               
2290                if(ext == NULL)
2291                        buf = webgetrectimer(NULL, 0, fmt);
2292                else
2293                {
2294                        buf = ostrcat(buf, "ok -> TimerID=", 1, 0);
2295                        buf = ostrcat(buf, node->timestamp, 1, 0);
2296                }
2297        }
2298        else
2299                buf = ostrcat(buf, "Timer not ok", 1, 0);
2300
2301        return buf;
2302}
2303
2304char* webeditrectimer(char* param, int fmt)
2305{
2306        char* buf = NULL, *buf1 = NULL, *buf2 = NULL;
2307        int maxlen = 0, pos = 0;
2308        struct rectimer *node = NULL;
2309        struct tm* loctime = NULL;
2310
2311        node = getrectimerbytimestamp(param);
2312        if(node == NULL) return NULL;
2313               
2314        ostrcatbig(&buf, "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><link rel=\"stylesheet\" type=\"text/css\" href=\"titan.css\"></head>", &maxlen, &pos);
2315        ostrcatbig(&buf, "<body class=body ><center>", &maxlen, &pos);
2316        ostrcatbig(&buf, "<form name=F1 action=query method=get><br><br>", &maxlen, &pos);
2317        ostrcatbig(&buf, "<input type=\"hidden\" name=\"rectimersend&node\" value=\"", &maxlen, &pos);
2318        ostrcatbig(&buf, node->timestamp, &maxlen, &pos);
2319        ostrcatbig(&buf, "\">", &maxlen, &pos);
2320        ostrcatbig(&buf, "<table border=\"0\"><tr>", &maxlen, &pos);
2321        ostrcatbig(&buf, "<td><font class=label>Name:&nbsp;</font></td>", &maxlen, &pos);
2322        ostrcatbig(&buf, "<td><input class=inputbox type=\"text\" name=\"name\" value=\"", &maxlen, &pos);
2323        ostrcatbig(&buf, node->name, &maxlen, &pos);
2324        ostrcatbig(&buf, "\" /></td></tr>", &maxlen, &pos);
2325
2326        ostrcatbig(&buf, "<td><font class=label>Type:&nbsp;</font></td>", &maxlen, &pos);
2327        ostrcatbig(&buf, "<td><select name=\"type\" border=0><option selected>", &maxlen, &pos);
2328        if( node->justplay == 0 )
2329                ostrcatbig(&buf, "record", &maxlen, &pos);
2330        else
2331                ostrcatbig(&buf, "switch channel", &maxlen, &pos);
2332        ostrcatbig(&buf, "<option>record<option>switch channel</select></td></tr>", &maxlen, &pos);
2333       
2334        /*ostrcatbig(&buf, "<td><font class=label>Repeate:&nbsp;</font></td>", &maxlen, &pos);
2335        ostrcatbig(&buf, "<td><select name=\"repeate\" border=0><option selected>", &maxlen, &pos);
2336        if( node->repeate == 0 )
2337                ostrcatbig(&buf, "once", &maxlen, &pos);
2338        else
2339                ostrcatbig(&buf, "repeate", &maxlen, &pos);
2340        ostrcatbig(&buf, "<option>once<option>repeate</select></td></tr>", &maxlen, &pos);     
2341        */
2342       
2343        /*ostrcatbig(&buf, "<td><font class=label>Repeate type:&nbsp;</font></td>", &maxlen, &pos);
2344        ostrcatbig(&buf, "<td><select name=\"repeatetype\" border=0><option selected>", &maxlen, &pos);
2345        if( node->repeate == 0 )
2346                ostrcatbig(&buf, "daily", &maxlen, &pos);
2347        else if( node->repeate == 1 )
2348                ostrcatbig(&buf, "weekly", &maxlen, &pos);
2349        else if( node->repeate == 2 )
2350                ostrcatbig(&buf, "workdays", &maxlen, &pos);
2351        else
2352                ostrcatbig(&buf, "user defined", &maxlen, &pos);
2353        ostrcatbig(&buf, "<option>daily<option>weekly<option>workdays<option>user defined</select></td></tr>", &maxlen, &pos); 
2354        */
2355               
2356        buf2 = malloc(MINMALLOC);
2357        loctime = olocaltime(&node->begin);
2358        strftime(buf2, MINMALLOC, "%H:%M %d-%m-%Y", loctime);
2359        free(loctime); loctime = NULL;
2360
2361        buf1 = ostrcat(buf2, "", 0, 0);
2362        ostrcatbig(&buf, "<td><font class=label>Begin:&nbsp;</font></td>", &maxlen, &pos);
2363        ostrcatbig(&buf, "<td><input class=inputbox type=\"text\" name=\"begin\" value=\"", &maxlen, &pos);
2364        ostrcatbig(&buf, buf1, &maxlen, &pos);
2365        ostrcatbig(&buf, "\" /></td></tr>", &maxlen, &pos);
2366        free(buf1); buf1 = NULL;
2367       
2368        loctime = olocaltime(&node->end);
2369        strftime(buf2, MINMALLOC, "%H:%M %d-%m-%Y", loctime);
2370        free(loctime); loctime = NULL;
2371
2372        buf1 = ostrcat(buf2, "", 0, 0);
2373        ostrcatbig(&buf, "<td><font class=label>End:&nbsp;</font></td>", &maxlen, &pos);
2374        ostrcatbig(&buf, "<td><input class=inputbox type=\"text\" name=\"end\" value=\"", &maxlen, &pos);
2375        ostrcatbig(&buf, buf1, &maxlen, &pos);
2376        ostrcatbig(&buf, "\" /></td></tr>", &maxlen, &pos);
2377        free(buf1); buf1 = NULL;
2378        free(buf2); buf2 = NULL;
2379       
2380        ostrcatbig(&buf, "</table><br><br><input class=button type=submit name=send value=\"Send\" onClick=\"return checkdaytime(begin.value, end.value)\"></input>&nbsp;<input class=button type=reset name=reset value=\"Reset\"></input></form></center></body></html>", &maxlen, &pos);
2381       
2382        //ostrcatbig(&buf, param, &maxlen, &pos);
2383        return buf;
2384}
2385
2386char* webdelrectimer(char* param, int fmt)
2387{
2388        char* buf = NULL, *string = NULL, *timerid = NULL;
2389        struct rectimer *node = NULL;
2390        int ext = 0;
2391       
2392        timerid = strstr(param, "timerid=");
2393        if(timerid != NULL)
2394        {
2395                timerid = timerid + 8;
2396                ext = 1;
2397        }
2398
2399        node = NULL;
2400        if(ext == 1)
2401        {
2402                string = param;
2403                while(string != NULL)
2404                {       
2405                        string = strchr(string, '&');
2406                        if(string != NULL)
2407                                *string++ = '\0';
2408                }
2409                node = getrectimerbytimestamp(timerid);
2410        }
2411        else
2412                node = getrectimerbytimestamp(param);
2413
2414        if(node == NULL)
2415        {
2416                buf = ostrcat(buf, "ERROR: timer not found", 1, 0);     
2417                return buf;
2418        }
2419       
2420        delrectimer(node, 1, 0);
2421       
2422        if(ext == 1)
2423                buf = ostrcat(buf, "ok -> timer deleted", 1, 0);
2424        else
2425                buf = webgetrectimer(NULL, 0, fmt);
2426       
2427        return buf;
2428}
2429
2430void putxmessage(struct stimerthread* timernode, char* captiontime, char* body)
2431{
2432        struct splitstr* ret1 = NULL;
2433        char* caption = NULL;
2434        int count1 = 0;
2435        int timeout = 5;
2436
2437        ret1 = strsplit(captiontime, "\t", &count1);
2438
2439        if(count1 >= 2)
2440        {
2441                caption = ostrcat(caption, (&ret1[0])->part, 1, 0);
2442                if((&ret1[1])->part != NULL)
2443                        timeout = atoi((&ret1[1])->part);
2444                textbox(caption, body, _("OK"), getrcconfigint("rcok", NULL), _("EXIT"), getrcconfigint("rcexit", NULL), NULL, 0, NULL, 0, 600, 280, timeout, 0);
2445        }
2446
2447        free(caption); free(body); free(captiontime); free(ret1);
2448}
2449
2450void xmessage(char* filename)
2451{
2452        char* param=NULL, *param1 = NULL, *param2 = NULL, *param3 = NULL, *param4 = NULL;
2453        char* caption=NULL, *body=NULL;
2454        char* timeout=NULL;
2455
2456        param4 = strstr(filename, "icon=");
2457        param3 = strstr(filename, "charset=");
2458        param2 = strstr(filename, "timeout=");
2459        param1 = strstr(filename, "caption=");
2460        param = strstr(filename, "body=");
2461
2462        if(param4 != NULL)
2463        {
2464                param4 = param4 - 1;
2465                *param4 = '\0';
2466                param4 = param4 + 5;
2467                *param4++ = '\0';
2468        }
2469        if(param3 != NULL)
2470        {
2471                param3 = param3 - 1;
2472                *param3 = '\0';
2473                param3 = param3 + 8;
2474                *param3++ = '\0';
2475        }
2476        if(param2 != NULL)
2477        {
2478                param2 = param2 - 1;
2479                *param2 = '\0';
2480                param2 = param2 + 8;
2481                *param2++ = '\0';
2482        }
2483        if(param1 != NULL)
2484        {
2485                param1 = param1 - 1;
2486                *param1 = '\0';
2487                param1 = param1 + 8;
2488                *param1++ = '\0';
2489        }
2490        if(param != NULL)
2491        {
2492                param = param - 1;
2493                *param = '\0';
2494                param = param + 5;
2495                *param++ = '\0';
2496                body = ostrcat(body, param, 1, 0);
2497        }
2498        else
2499                body = ostrcat(body, " ", 1, 0);
2500               
2501        if(param2 != NULL)
2502                timeout = ostrcat(timeout, param2, 1, 0);
2503        else
2504                timeout = ostrcat(timeout, "5", 1, 0);
2505               
2506        if(param1 != NULL)
2507                caption = ostrcat(caption, param1, 1, 0);
2508        else
2509                caption = ostrcat(caption, "XMESSAGE", 1, 0);
2510       
2511        caption = ostrcat(caption, "\t", 1, 0);
2512        caption = ostrcat(caption, timeout, 1, 1);
2513               
2514        addtimer(&putxmessage, START, 1000, 1, (void*)caption, (void*)body, NULL);
2515        return;
2516}
2517
2518char* webgetvol(int fmt)
2519{
2520        char* buf = NULL;
2521
2522        buf = oitoa(getvol());
2523        return buf;
2524}
2525
2526char* webgetmute(int fmt)
2527{
2528        char* buf = NULL;
2529
2530        buf = oitoa(status.mute);
2531        return buf;
2532}
2533
2534char* webgetrccodes(int fmt)
2535{
2536        int i = 0;
2537        char* buf = NULL;
2538        struct clist **clist = rcconfig;
2539        struct clist* node = NULL;
2540
2541        for(i = 0; i < LISTHASHSIZE; i++)
2542        {
2543                node = clist[i];
2544
2545                while(node != NULL)
2546                {
2547                        buf = ostrcat(buf, node->key, 1, 0);
2548                        buf = ostrcat(buf, "#", 1, 0);
2549                        buf = ostrcat(buf, node->value, 1, 0);
2550                        buf = ostrcat(buf, "\n", 1, 0);
2551                        node = node->next;
2552                }
2553        }
2554
2555        return buf;
2556}
2557
2558#endif
Note: See TracBrowser for help on using the repository browser.