ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/Daodan/Flatline/src/Flatline.c
(Generate patch)

Comparing Daodan/Flatline/src/Flatline.c (file contents):
Revision 457 by rossy, Fri Aug 14 10:45:13 2009 UTC vs.
Revision 460 by rossy, Tue Oct 6 11:21:11 2009 UTC

# Line 1 | Line 1
1   #include "Flatline.h"
2  
3 < bool Net_Listen(uint16_t port, bool (*packet_callback)(char* data, int datalen, int from))
4 < {
5 <        int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
6 <        
7 <        if (sock < 0)
8 <        {
9 <                DDrStartupMessage("could not create socket");
10 <                return false;
11 <        }
12 <        
13 <        sockaddr_in address;
14 <        memset(&address, 0, sizeof(sockaddr_in));
15 <        address.sin_family = AF_INET;
16 <        address.sin_addr.s_addr = htonl(INADDR_ANY);
17 <        address.sin_port = htons(port);
18 <        
19 <        if (bind(sock, (sockaddr*)&address, sizeof(sockaddr_in)) < 0)
20 <        {
21 <                DDrStartupMessage("could not bind port %d", port);
22 <                closesocket(sock);
23 <                return false;
24 <        }
25 <        
26 <        char data[65537];
27 <        data[sizeof(data) - 1] = '\0';
28 <        sockaddr_in from;
29 <        int recvlen;
30 <        for (;;)
31 <        {
32 <                int fromlen = sizeof(sockaddr_in);
33 <                memset(&from, 0, sizeof(sockaddr_in));
34 <                recvlen = recvfrom(sock, data, sizeof(data) - 1, 0, (sockaddr*)&from, (void*)&fromlen);
35 <                if (!packet_callback(data, recvlen, ntohl(from.sin_addr.s_addr)))
36 <                        break;
37 <        }
38 <        closesocket(sock);
39 <        return true;
40 < }
41 <
42 < int Net_CreateSocket(uint16_t port)
43 < {
44 <        int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
45 <        
46 <        if (sock < 0)
47 <        {
48 <                DDrStartupMessage("could not create socket");
49 <                return -1;
50 <        }
51 <        
52 <        sockaddr_in address;
53 <        memset(&address, 0, sizeof(sockaddr_in));
54 <        address.sin_family = AF_INET;
55 <        address.sin_addr.s_addr = htonl(INADDR_ANY);
56 <        address.sin_port = htons(port);
57 <        
58 <        if (bind(sock, (sockaddr*)&address, sizeof(sockaddr_in)) < 0)
59 <        {
60 <                DDrStartupMessage("could not bind port %d", port);
61 <                return false;
62 <        }
63 <        
64 <        unsigned long nonBlocking = 1;
65 <        if (ioctlsocket(sock, FIONBIO, &nonBlocking))
66 <        {
67 <                DDrStartupMessage("failed to set non-blocking socket");
68 <                return false;
69 <        }
70 <        
71 <        return sock;
72 < }
73 <
74 < bool Net_Send(int socket, int ip, uint16_t port, char* data, int datalen)
75 < {
76 <        sockaddr_in address;
77 <        memset(&address, 0, sizeof(sockaddr_in));
78 <        address.sin_family = AF_INET;
79 <        address.sin_addr.s_addr = ip;
80 <        address.sin_port = htons(port);
81 <        
82 <        return sendto(socket, data, datalen, 0, (sockaddr*)&address, sizeof(address));
83 < }
84 <
85 < void Net_CloseSocket(int sock)
86 < {
87 <        closesocket(sock);
88 < }
89 <
90 < bool FLrListen_PacketCallback(char* data, int datalen, int from)
3 > bool FLrServer_PacketCallback(char* data, int datalen, int from)
4   {
5          static int recieved = 0;
6          
# Line 97 | Line 10 | bool FLrListen_PacketCallback(char* data
10          return true;
11   }
12  
13 < bool FLrListen_Run()
13 > bool FLrServer_Run()
14   {
15          return Net_Listen(27777, FLrListen_PacketCallback);
16   }

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)