5f61548c8f607fbcacd9d0d828272984a5bb6fff
Christian Heimke BlinkenLib v.0.4 (2005-07-02)

Christian Heimke authored 13 years ago

1) /* BlinkenLib
Christian Heimke BlinkenLib v.0.5.2 (2006-05...

Christian Heimke authored 13 years ago

2)  * version 0.5.2 date 2006-05-10
3)  * Copyright 2004-2006 Stefan Schuermans <1stein@schuermans.info>
Christian Heimke BlinkenLib v.0.4 (2005-07-02)

Christian Heimke authored 13 years ago

4)  * Copyleft: GNU public license - http://www.gnu.org/copyleft/gpl.html
5)  * a blinkenarea.org project
6)  */
7) 
8) #include <stdio.h>
9) #include <stdlib.h>
10) #include <string.h>
Christian Heimke BlinkenLib v.0.5.2 (2006-05...

Christian Heimke authored 13 years ago

11) #ifdef WIN32
12) #include <winsock2.h>
13) #define close closesocket
14) #else
Christian Heimke BlinkenLib v.0.5.1 (2005-12...

Christian Heimke authored 13 years ago

15) #include <unistd.h>
Christian Heimke BlinkenLib v.0.4 (2005-07-02)

Christian Heimke authored 13 years ago

16) #include <sys/types.h>
17) #include <sys/socket.h>
18) #include <netinet/in.h>
19) #include <arpa/inet.h>
Christian Heimke BlinkenLib v.0.5.2 (2006-05...

Christian Heimke authored 13 years ago

20) #endif
Christian Heimke BlinkenLib v.0.4 (2005-07-02)

Christian Heimke authored 13 years ago

21) 
22) #include "BlinkenLib.h"
23) 
24) int main( int argCnt, char * * args )
25) {
Christian Heimke BlinkenLib v.0.5.2 (2006-05...

Christian Heimke authored 13 years ago

26)   int i, bound, val, timeout;
27)   SOCKET udpSocket;
Christian Heimke BlinkenLib v.0.4 (2005-07-02)

Christian Heimke authored 13 years ago

28)   char txt[64];
29)   unsigned short port;
30)   struct sockaddr_in addr;
31)   stBlinkenMovie * pMovie;
32) 
33)   //print info
34)   printf( "BlinkenLib - BlinkenRecv\n"
Christian Heimke BlinkenLib v.0.5.2 (2006-05...

Christian Heimke authored 13 years ago

35)           "version 0.5.2 date 2006-05-10\n"
36)           "Copyright 2004-2006 Stefan Schuermans <1stein@schuermans.info>\n"
Christian Heimke BlinkenLib v.0.4 (2005-07-02)

Christian Heimke authored 13 years ago

37)           "Copyleft: GNU public license - http://www.gnu.org/copyleft/gpl.html\n"
Christian Heimke BlinkenLib v.0.5 (2005-12-06)

Christian Heimke authored 13 years ago

38)           "a blinkenarea.org project\n\n" );
Christian Heimke BlinkenLib v.0.4 (2005-07-02)

Christian Heimke authored 13 years ago

39) 
40)   //print syntax
41)   if( argCnt <= 1 )
42)   {
43)     printf( "syntax: %s <parameter> [...]\n\n"
44)             "parameters:\n"
45)             "  -l [<ip>:]<port>\n"
46)             "     local address (defaults to 0.0.0.0:2323)\n"
47)             "     must occur before -r and -o, may only occur once\n"
48)             "  -r <ip>[:<port>]\n"
49)             "     remote addess (defaults to every remote address)\n"
50)             "  -t <milliseconds>\n"
51)             "     set timeout (to detect movie end, defaults to 5000)\n"
52)             "  -o <file>\n"
53)             "     receive movie and write it to file (*.blm, *.bmm, *.bml, *.bbm)\n\n",
54)             args[0] );
55)     return 0;
56)   }
57) 
Christian Heimke BlinkenLib v.0.5.2 (2006-05...

Christian Heimke authored 13 years ago

58) #ifdef WIN32
59)   {
60)     WSADATA WsaData;
61)     WSAStartup( 0x0101, &WsaData );
62)   }
63) #endif
64) 
Christian Heimke BlinkenLib v.0.4 (2005-07-02)

Christian Heimke authored 13 years ago

65)   //create udp socket
66)   udpSocket = socket( AF_INET, SOCK_DGRAM, IPPROTO_UDP );
Christian Heimke BlinkenLib v.0.5.2 (2006-05...

Christian Heimke authored 13 years ago

67)   if( udpSocket == INVALID_SOCKET )
Christian Heimke BlinkenLib v.0.4 (2005-07-02)

Christian Heimke authored 13 years ago

68)   {
69)     printf( "cannot create UDP socket\n" );
Christian Heimke BlinkenLib v.0.5.2 (2006-05...

Christian Heimke authored 13 years ago

70) #ifdef WIN32
71)     WSACleanup( );
72) #endif
Christian Heimke BlinkenLib v.0.4 (2005-07-02)

Christian Heimke authored 13 years ago

73)     return -1;
74)   }
75)   bound = 0;
76) 
77)   //process parameters
78)   timeout = 5000;
79)   for( i = 1; i < argCnt; i++ )
80)   {
81) 
82)     //local address
83)     if( strcmp( args[i], "-l" ) == 0 )
84)     {
85)       if( i + 1 < argCnt )
86)       {
87)         i++;
88)         if( sscanf( args[i], "%32[0-9.]:%hu", txt, &port ) == 2 )
89)         {
90)           addr.sin_family = AF_INET;
91)           addr.sin_port = htons( port );
92)           addr.sin_addr.s_addr = inet_addr( txt );
93)           if( bind( udpSocket, (struct sockaddr *)&addr, sizeof( addr ) ) != 0 )
94)             printf( "could not set local address to \"%s\"\n", args[i] );
95)           else
96)             bound = 1;
97)         }
98)         else if( sscanf( args[i], "%hu", &port ) == 1 )
99)         {
100)           addr.sin_family = AF_INET;
101)           addr.sin_port = htons( port );
102)           addr.sin_addr.s_addr = htonl( INADDR_ANY );
103)           if( bind( udpSocket, (struct sockaddr *)&addr, sizeof( addr ) ) != 0 )
104)             printf( "could not set local address to \"%s\"\n", args[i] );
105)           else
106)             bound = 1;
107)         }
108)         else
109)           printf( "invalid local address \"%s\"\n", args[i] );
110)       }
111)       else
112)         printf( "missing local address for \"-l\"\n" );
113)     }
114) 
115)     //remote address
116)     else if( strcmp( args[i], "-r" ) == 0 )
117)     {
118)       if( i + 1 < argCnt )
119)       {
120)         i++;
121)         if( sscanf( args[i], "%32[0-9.]:%hu", txt, &port ) == 2 )
122)         {
123)           addr.sin_family = AF_INET;
124)           addr.sin_port = htons( port );
125)           addr.sin_addr.s_addr = inet_addr( txt );
126)           if( connect( udpSocket, (struct sockaddr *)&addr, sizeof( addr ) ) != 0 )
127)             printf( "could not set remote address to \"%s\"\n", args[i] );
128)         }
129)         else if( sscanf( args[i], "%32[0-9.]", txt ) == 1 )
130)         {
131)           addr.sin_family = AF_INET;
132)           addr.sin_port = htons( 23230 );
133)           addr.sin_addr.s_addr = inet_addr( txt );
134)           if( connect( udpSocket, (struct sockaddr *)&addr, sizeof( addr ) ) != 0 )
135)             printf( "could not set remote address to \"%s\"\n", args[i] );
136)         }
137)         else
138)           printf( "invalid remote address \"%s\"\n", args[i] );
139)       }
140)       else
141)         printf( "missing remote address for \"-r\"\n" );
142)     }
143) 
144)     //timeout
145)     else if( strcmp( args[i], "-t" ) == 0 )
146)     {
147)       if( i + 1 < argCnt )
148)       {
149)         i++;
Christian Heimke BlinkenLib v.0.5.1 (2005-12...

Christian Heimke authored 13 years ago

150)         if( sscanf( args[i], "%u", &val ) == 1 )
Christian Heimke BlinkenLib v.0.4 (2005-07-02)

Christian Heimke authored 13 years ago

151)           timeout = val;
152)         else
153)           printf( "invalid timeout value \"%s\"\n", args[i] );
154)       }
155)       else
156)         printf( "missing timeout value for \"-t\"\n" );
157)     }
158) 
159)     //receive movie and write it to file
160)     else if( strcmp( args[i], "-o" ) == 0 )
161)     {
162)       if( i + 1 < argCnt )
163)       {
164)         i++;
165)         if( ! bound ) //try to bind if not bound
166)         {
167)           printf( "no local address to receive movie for file \"%s\" to,\n"
168)                   "  using default local address \"0.0.0.0:2323\"\n", args[i] );
169)           addr.sin_family = AF_INET;
170)           addr.sin_port = htons( 2323 );
171)           addr.sin_addr.s_addr = htonl( INADDR_ANY );
172)           if( bind( udpSocket, (struct sockaddr *)&addr, sizeof( addr ) ) != 0 )
173)             printf( "could not set local address to \"0.0.0.0:2323\"\n" );
174)           else
175)             bound = 1;
176)         }
177)         if( bound )
178)         {
179)           printf( "receiving movie for file \"%s\"...\n", args[i] );
180)           pMovie = BlinkenMovieReceive( udpSocket, timeout, NULL );
181)           if( pMovie == NULL )
182)             printf( "could not receive movie for file \"%s\"\n", args[i] );
183)           else
184)           {
185)             if( BlinkenMovieSave( pMovie, args[i] ) < 0 )
186)               printf( "could not write movie \"%s\"\n", args[i] );
187)             else
188)               printf( "movie \"%s\" written\n", args[i] );
189)             BlinkenMovieFree( pMovie );
190)           }
191)         }
192)         else
193)           printf( "no local address set to receive movie for file \"%s\" on\n", args[i] );
194)       }
195)       else
196)         printf( "missing output filename for \"-o\"\n" );
197)     }
198) 
199)     //unknown parameter
200)     else
201)       printf( "unknown parameter \"%s\", call without parameters to get help\n", args[i] );
202) 
203)   } //for( i ...
204) 
205)   //close socket
206)   close( udpSocket );
207) 
Christian Heimke BlinkenLib v.0.5.2 (2006-05...

Christian Heimke authored 13 years ago

208) #ifdef WIN32
209)   WSACleanup( );
210) #endif