5ae742f08b5bce413346bd2173dadefc53006320
[asterisk/asterisk.git] / utils / streamplayer.c
1 /*
2 * streamplayer.c
3 *
4 * A utility for reading from a stream
5
6 * Copyright (C) 2005, Digium, Inc.
7 *
8 * Russell Bryant <russell@digium.com>
9 *
10 * This program is free software, distributed under the terms of
11 * the GNU General Public License
12 */
13
14 #include <stdlib.h>
15 #include <stdio.h>
16 #include <string.h>
17 #include <netdb.h>
18 #include <unistd.h>
19 #include <sys/types.h>
20 #include <sys/socket.h>
21 #include <sys/time.h>
22
23
24 int main(int argc, char *argv[])
25 {
26         struct sockaddr_in sin;
27         struct hostent *hp;
28         int s;
29         int res;
30         char buf[2048];
31         fd_set wfds;
32         struct timeval tv;
33
34         if (argc != 3) {
35                 fprintf(stderr, "Usage: ./streamplayer <ip> <port>\n");
36                 exit(1);
37         }
38
39         hp = gethostbyname(argv[1]);
40         if (!hp) {
41                 fprintf(stderr, "Unable to lookup IP for host '%s'\n", argv[1]);
42                 exit(1);
43         }
44
45         memset(&sin, 0, sizeof(sin));
46         
47         sin.sin_family = AF_INET;
48         sin.sin_port = htons(atoi(argv[2]));
49         memcpy(&sin.sin_addr, hp->h_addr, sizeof(sin.sin_addr));
50         
51         s = socket(AF_INET, SOCK_STREAM, 0);
52         
53         if (s < 0) {
54                 fprintf(stderr, "Unable to allocate socket!\n");
55                 exit(1);
56         }       
57
58         res = connect(s, (struct sockaddr *)&sin, sizeof(sin));
59         
60         if (res) {
61                 fprintf(stderr, "Unable to connect to host!\n");
62                 close(s);
63                 exit(1);        
64         }
65
66         while (1) {
67                 res = read(s, buf, sizeof(buf));
68
69                 if (res < 1)
70                         break;          
71         
72                 memset(&tv, 0, sizeof(tv));             
73                 FD_ZERO(&wfds);
74                 FD_SET(1, &wfds);
75
76                 select(2, NULL, &wfds, NULL, &tv);
77
78                 if (FD_ISSET(1, &wfds))
79                         write(1, buf, res);
80         }
81
82         close(s);
83         exit(res);
84 }