some network functions (to be continued)
[my-code/ivac.git] / src / inet.c
1 /* inet.c -- network management stuff
2  *
3  * author: hackbard@hackdaworld.dyndns.org
4  *
5  */
6
7 #include "inet.h"
8
9 int network_init(t_ivac *ivac) {
10   
11   sockaddr_in addr;
12  
13   puts("[ivac] inet: initializing network ...");
14
15   memset(ivac->net.connection,0,MAX_CONNECTIONS*sizeof(t_connection));
16
17   if((ivac->net.l_fd=socket(AF_INET,SOCK_STREAM,0))==-1) {
18     perror("[ivac] inet.c: socket call");
19     return ERROR;
20   }
21
22   memset(&addr,0,sizeof(struct sockaddr));
23   addr.sin_family=AF_INET;
24   addr.sin_port=htons(ivac->net.l_port);
25   addr.sin_addr.s_addr=INADDR_ANY;
26
27   if(bind(ivac->net.l_fd,(struct sockaddr *)&addr,
28           sizeof(struct sockaddr))==-1) {
29     perror("[ivac] inet.c: bind call");
30     return ERROR;
31   }
32
33   printf("[ivac] inet: listen on %s port %d.\n",inet_ntoa(addr.sin_addr.s_addr)
34                                                ,ivac->net.l_port);
35
36   return SUCCESS;
37 }
38
39 int network_manage_connection(t_ivac *ivac) {
40
41   int i;
42   sockaddr_in addr;
43   
44   for(i=0;i<MAX_CONNECTIONS;i++) {
45
46     if(ivac->net.connection[i].status&C_IN_USE) {
47
48       if(ivac->net.connection[i].status&C_HANGUP) {
49         close(ivac->net.connection[i].fd);
50         ivac->net.connection[i].status=0;
51       }
52
53       if(ivac->net.connection[i].status&C_INFO_A) {
54
55         if(!ivac->net.connection[i].status&C_SOCKET) {
56           if((ivac->net.connection[i].fd=socket(AF_INET,SOCK_STREAM,0))==-1) {
57             perror("[ivac] inet.c: socket call");
58             return ERROR;
59           }
60         }
61
62         if(!ivac->net.connection[i].status&C_ESTABL) {
63
64           memset(&addr,0,sizeof(struct sockaddr));
65           addr.sin_family=AF_INET;
66           addr.sin_port=htons(ivac->net.connection[i].port);
67           addr.sin_addr_s_addr=inet_aton(ivac->net.connection[i].ip);
68           
69           if(connect(ivac->net.connection[i].fd,(struct sockaddr *)&addr,
70                      sizeof(struct sockaddr))==-1) {
71             perror("[ivac] inet.c: connect call");
72             return ERROR;
73           }
74
75         }
76
77       }
78
79     }
80
81   }
82
83   return SUCCESS;
84 }
85  
86 int network_send(unsigned char *data,int datasize,int sendmask,t_ivac *ivac) {
87
88
89   return SUCCESS;
90 }