]> git.vomp.tv Git - vompclient.git/blob - udp.cc
Live TV updates
[vompclient.git] / udp.cc
1 /*
2     Copyright 2006 Chris Tallon
3
4     This file is part of VOMP.
5
6     VOMP is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 2 of the License, or
9     (at your option) any later version.
10
11     VOMP is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15
16     You should have received a copy of the GNU General Public License
17     along with VOMP; if not, write to the Free Software
18     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 */
20
21 #include "udp.h"
22
23 #include "dsock.h"
24 #include "messagequeue.h"
25 #include "message.h"
26 #include "log.h"
27
28 //void dump(unsigned char* data, USHORT size);
29 //unsigned char dcc(UCHAR c);
30
31 UDP::UDP()
32 {
33   log = Log::getInstance();
34   initted = 0;
35 }
36
37 UDP::~UDP()
38 {
39   shutdown();
40 }
41
42 int UDP::shutdown()
43 {
44   if (!initted) return 1;
45   if (threadIsActive()) threadCancel();
46   ds->shutdown();
47
48   initted = 0;
49   return 1;
50 }
51
52 int UDP::run(MessageQueue* tcommandMessageQueue)
53 {
54   if (threadIsActive()) return 1;
55   log->log("UDP", Log::DEBUG, "Starting UDP command server");
56
57   initted = 1;
58
59   commandMessageQueue = tcommandMessageQueue;
60   ds = new DatagramSocket(2000);
61
62   if (!ds->init())
63   {
64     log->log("UDP", Log::DEBUG, "DSock init error");
65     shutdown();
66     return 0;
67   }
68
69   if (!threadStart())
70   {
71     log->log("UDP", Log::DEBUG, "Thread start error");
72     shutdown();
73     return 0;
74   }
75
76   log->log("UDP", Log::DEBUG, "UDP command server started");
77   return 1;
78 }
79
80 void UDP::threadMethod()
81 {
82   threadSetKillable();
83
84   int retval;
85   while(1)
86   {
87     #ifndef WIN32
88     retval = ds->waitforMessage(0);
89     #else
90     log->log("UDP", Log::DEBUG, "Wait for packet");
91     threadCheckExit();
92     retval = ds->waitforMessage(1);
93     #endif
94
95     if (retval == 0)
96     {
97       log->log("UDP", Log::CRIT, "Wait for packet error");
98       return;
99     }
100     else if (retval == 1)
101     {
102       continue;
103     }
104     else
105     {
106       processRequest((UCHAR*)ds->getData(), ds->getDataLength());
107     }
108   }
109 }
110
111 void UDP::processRequest(UCHAR* data, int length)
112 {
113   log->log("UDP", Log::DEBUG, "Got request");
114
115   char* temp = new char[length + 1];
116   memcpy(temp, data, length);
117   temp[length] = '\0';
118   int command = atoi(temp);
119   delete[] temp;
120
121   log->log("UDP", Log::DEBUG, "Command %i recieved", command);
122
123
124   Message *m = new Message();
125   m->to = commandMessageQueue;
126   m->message = Message::UDP_BUTTON;
127   m->parameter = command;
128   commandMessageQueue->postMessage(m);
129 }
130
131 /*
132 void dump(unsigned char* data, USHORT size)
133 {
134   printf("Size = %u\n", size);
135
136   USHORT c = 0;
137   while(c < size)
138   {
139     if ((size - c) > 15)
140     {
141       printf(" %02X %02X %02X %02X  %02X %02X %02X %02X  %02X %02X %02X %02X  %02X %02X %02X %02X  %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n",
142         data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
143         data[c+8], data[c+9], data[c+10], data[c+11], data[c+12], data[c+13], data[c+14], data[c+15],
144         dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]), dcc(data[c+3]), dcc(data[c+4]), dcc(data[c+5]), dcc(data[c+6]), dcc(data[c+7]),
145         dcc(data[c+8]), dcc(data[c+9]), dcc(data[c+10]), dcc(data[c+11]), dcc(data[c+12]), dcc(data[c+13]), dcc(data[c+14]), dcc(data[c+15]));
146       c += 16;
147     }
148     else
149     {
150       switch (size - c)
151       {
152         case 15:
153           printf(" %02X %02X %02X %02X  %02X %02X %02X %02X  %02X %02X %02X %02X  %02X %02X %02X     %c%c%c%c%c%c%c%c%c%c%c%c%c%c%c\n",
154             data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
155             data[c+8], data[c+9], data[c+10], data[c+11], data[c+12], data[c+13], data[c+14],
156             dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]), dcc(data[c+3]), dcc(data[c+4]), dcc(data[c+5]), dcc(data[c+6]), dcc(data[c+7]),
157             dcc(data[c+8]), dcc(data[c+9]), dcc(data[c+10]), dcc(data[c+11]), dcc(data[c+12]), dcc(data[c+13]), dcc(data[c+14]));
158           c += 15;
159           break;
160         case 14:
161           printf(" %02X %02X %02X %02X  %02X %02X %02X %02X  %02X %02X %02X %02X  %02X %02X        %c%c%c%c%c%c%c%c%c%c%c%c%c%c\n",
162             data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
163             data[c+8], data[c+9], data[c+10], data[c+11], data[c+12], data[c+13],
164             dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]), dcc(data[c+3]), dcc(data[c+4]), dcc(data[c+5]), dcc(data[c+6]), dcc(data[c+7]),
165             dcc(data[c+8]), dcc(data[c+9]), dcc(data[c+10]), dcc(data[c+11]), dcc(data[c+12]), dcc(data[c+13]));
166           c += 14;
167           break;
168         case 13:
169           printf(" %02X %02X %02X %02X  %02X %02X %02X %02X  %02X %02X %02X %02X  %02X           %c%c%c%c%c%c%c%c%c%c%c%c%c\n",
170             data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
171             data[c+8], data[c+9], data[c+10], data[c+11], data[c+12],
172             dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]), dcc(data[c+3]), dcc(data[c+4]), dcc(data[c+5]), dcc(data[c+6]), dcc(data[c+7]),
173             dcc(data[c+8]), dcc(data[c+9]), dcc(data[c+10]), dcc(data[c+11]), dcc(data[c+12]));
174           c += 13;
175           break;
176         case 12:
177           printf(" %02X %02X %02X %02X  %02X %02X %02X %02X  %02X %02X %02X %02X               %c%c%c%c%c%c%c%c%c%c%c%c\n",
178             data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
179             data[c+8], data[c+9], data[c+10], data[c+11],
180             dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]), dcc(data[c+3]), dcc(data[c+4]), dcc(data[c+5]), dcc(data[c+6]), dcc(data[c+7]),
181             dcc(data[c+8]), dcc(data[c+9]), dcc(data[c+10]), dcc(data[c+11]));
182           c += 12;
183           break;
184         case 11:
185           printf(" %02X %02X %02X %02X  %02X %02X %02X %02X  %02X %02X %02X                  %c%c%c%c%c%c%c%c%c%c%c\n",
186             data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
187             data[c+8], data[c+9], data[c+10],
188             dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]), dcc(data[c+3]), dcc(data[c+4]), dcc(data[c+5]), dcc(data[c+6]), dcc(data[c+7]),
189             dcc(data[c+8]), dcc(data[c+9]), dcc(data[c+10]));
190           c += 11;
191           break;
192         case 10:
193           printf(" %02X %02X %02X %02X  %02X %02X %02X %02X  %02X %02X                     %c%c%c%c%c%c%c%c%c%c\n",
194             data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
195             data[c+8], data[c+9],
196             dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]), dcc(data[c+3]), dcc(data[c+4]), dcc(data[c+5]), dcc(data[c+6]), dcc(data[c+7]),
197             dcc(data[c+8]), dcc(data[c+9]));
198           c += 10;
199           break;
200         case 9:
201           printf(" %02X %02X %02X %02X  %02X %02X %02X %02X  %02X                        %c%c%c%c%c%c%c%c%c\n",
202             data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
203             data[c+8],
204             dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]), dcc(data[c+3]), dcc(data[c+4]), dcc(data[c+5]), dcc(data[c+6]), dcc(data[c+7]),
205             dcc(data[c+8]));
206           c += 9;
207           break;
208         case 8:
209           printf(" %02X %02X %02X %02X  %02X %02X %02X %02X                            %c%c%c%c%c%c%c%c\n",
210             data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
211             dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]), dcc(data[c+3]), dcc(data[c+4]), dcc(data[c+5]), dcc(data[c+6]), dcc(data[c+7]));
212           c += 8;
213           break;
214         case 7:
215           printf(" %02X %02X %02X %02X  %02X %02X %02X                               %c%c%c%c%c%c%c\n",
216             data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6],
217             dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]), dcc(data[c+3]), dcc(data[c+4]), dcc(data[c+5]), dcc(data[c+6]));
218           c += 7;
219           break;
220         case 6:
221           printf(" %02X %02X %02X %02X  %02X %02X                                  %c%c%c%c%c%c\n",
222             data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5],
223             dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]), dcc(data[c+3]), dcc(data[c+4]), dcc(data[c+5]));
224           c += 6;
225           break;
226         case 5:
227           printf(" %02X %02X %02X %02X  %02X                                     %c%c%c%c%c\n",
228             data[c], data[c+1], data[c+2], data[c+3], data[c+4],
229             dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]), dcc(data[c+3]), dcc(data[c+4]));
230           c += 5;
231           break;
232         case 4:
233           printf(" %02X %02X %02X %02X                                         %c%c%c%c\n",
234             data[c], data[c+1], data[c+2], data[c+3],
235             dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]), dcc(data[c+3]));
236           c += 4;
237           break;
238         case 3:
239           printf(" %02X %02X %02X                                            %c%c%c\n",
240             data[c], data[c+1], data[c+2],
241             dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]));
242           c += 3;
243           break;
244         case 2:
245           printf(" %02X %02X                                               %c%c\n",
246             data[c], data[c+1],
247             dcc(data[c]), dcc(data[c+1]));
248           c += 2;
249           break;
250         case 1:
251           printf(" %02X                                                  %c\n",
252             data[c],
253             dcc(data[c]));
254           c += 1;
255           break;
256       }
257     }
258   }
259 }
260
261 unsigned char dcc(UCHAR c)
262 {
263   if (isspace(c)) return ' ';
264   if (isprint(c)) return c;
265   return '.';
266 }
267 */