]> git.vomp.tv Git - vompclient-marten.git/blob - udp.cc
Compilation fixes
[vompclient-marten.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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 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     retval = ds->waitforMessage(0);
88
89     if (retval == 0)
90     {
91       log->log("UDP", Log::CRIT, "Wait for packet error");
92       return;
93     }
94     else if (retval == 1)
95     {
96       continue;
97     }
98     else
99     {
100       processRequest((UCHAR*)ds->getData(), ds->getDataLength());
101     }
102   }
103 }
104
105 void UDP::processRequest(UCHAR* data, int length)
106 {
107   log->log("UDP", Log::DEBUG, "Got request");
108
109   char* temp = new char[length + 1];
110   memcpy(temp, data, length);
111   temp[length] = '\0';
112   int command = atoi(temp);
113   delete[] temp;
114
115   log->log("UDP", Log::DEBUG, "Command %i recieved", command);
116
117
118   Message *m = new Message();
119   m->to = commandMessageQueue;
120   m->message = Message::UDP_BUTTON;
121   m->parameter = command;
122   commandMessageQueue->postMessage(m);
123 }
124
125 /*
126 void dump(unsigned char* data, USHORT size)
127 {
128   printf("Size = %u\n", size);
129
130   USHORT c = 0;
131   while(c < size)
132   {
133     if ((size - c) > 15)
134     {
135       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",
136         data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
137         data[c+8], data[c+9], data[c+10], data[c+11], data[c+12], data[c+13], data[c+14], data[c+15],
138         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]),
139         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]));
140       c += 16;
141     }
142     else
143     {
144       switch (size - c)
145       {
146         case 15:
147           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",
148             data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
149             data[c+8], data[c+9], data[c+10], data[c+11], data[c+12], data[c+13], data[c+14],
150             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]),
151             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]));
152           c += 15;
153           break;
154         case 14:
155           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",
156             data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
157             data[c+8], data[c+9], data[c+10], data[c+11], data[c+12], data[c+13],
158             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]),
159             dcc(data[c+8]), dcc(data[c+9]), dcc(data[c+10]), dcc(data[c+11]), dcc(data[c+12]), dcc(data[c+13]));
160           c += 14;
161           break;
162         case 13:
163           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",
164             data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
165             data[c+8], data[c+9], data[c+10], data[c+11], data[c+12],
166             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]),
167             dcc(data[c+8]), dcc(data[c+9]), dcc(data[c+10]), dcc(data[c+11]), dcc(data[c+12]));
168           c += 13;
169           break;
170         case 12:
171           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",
172             data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
173             data[c+8], data[c+9], data[c+10], data[c+11],
174             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]),
175             dcc(data[c+8]), dcc(data[c+9]), dcc(data[c+10]), dcc(data[c+11]));
176           c += 12;
177           break;
178         case 11:
179           printf(" %02X %02X %02X %02X  %02X %02X %02X %02X  %02X %02X %02X                  %c%c%c%c%c%c%c%c%c%c%c\n",
180             data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
181             data[c+8], data[c+9], data[c+10],
182             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]),
183             dcc(data[c+8]), dcc(data[c+9]), dcc(data[c+10]));
184           c += 11;
185           break;
186         case 10:
187           printf(" %02X %02X %02X %02X  %02X %02X %02X %02X  %02X %02X                     %c%c%c%c%c%c%c%c%c%c\n",
188             data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
189             data[c+8], data[c+9],
190             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]),
191             dcc(data[c+8]), dcc(data[c+9]));
192           c += 10;
193           break;
194         case 9:
195           printf(" %02X %02X %02X %02X  %02X %02X %02X %02X  %02X                        %c%c%c%c%c%c%c%c%c\n",
196             data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
197             data[c+8],
198             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]),
199             dcc(data[c+8]));
200           c += 9;
201           break;
202         case 8:
203           printf(" %02X %02X %02X %02X  %02X %02X %02X %02X                            %c%c%c%c%c%c%c%c\n",
204             data[c], data[c+1], data[c+2], data[c+3], data[c+4], data[c+5], data[c+6], data[c+7],
205             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]));
206           c += 8;
207           break;
208         case 7:
209           printf(" %02X %02X %02X %02X  %02X %02X %02X                               %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],
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]));
212           c += 7;
213           break;
214         case 6:
215           printf(" %02X %02X %02X %02X  %02X %02X                                  %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],
217             dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]), dcc(data[c+3]), dcc(data[c+4]), dcc(data[c+5]));
218           c += 6;
219           break;
220         case 5:
221           printf(" %02X %02X %02X %02X  %02X                                     %c%c%c%c%c\n",
222             data[c], data[c+1], data[c+2], data[c+3], data[c+4],
223             dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]), dcc(data[c+3]), dcc(data[c+4]));
224           c += 5;
225           break;
226         case 4:
227           printf(" %02X %02X %02X %02X                                         %c%c%c%c\n",
228             data[c], data[c+1], data[c+2], data[c+3],
229             dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]), dcc(data[c+3]));
230           c += 4;
231           break;
232         case 3:
233           printf(" %02X %02X %02X                                            %c%c%c\n",
234             data[c], data[c+1], data[c+2],
235             dcc(data[c]), dcc(data[c+1]), dcc(data[c+2]));
236           c += 3;
237           break;
238         case 2:
239           printf(" %02X %02X                                               %c%c\n",
240             data[c], data[c+1],
241             dcc(data[c]), dcc(data[c+1]));
242           c += 2;
243           break;
244         case 1:
245           printf(" %02X                                                  %c\n",
246             data[c],
247             dcc(data[c]));
248           c += 1;
249           break;
250       }
251     }
252   }
253 }
254
255 unsigned char dcc(UCHAR c)
256 {
257   if (isspace(c)) return ' ';
258   if (isprint(c)) return c;
259   return '.';
260 }
261 */