summaryrefslogtreecommitdiff
path: root/noncore/net/wellenreiter/libwellenreiter/source/wl_proto.cc
Unidiff
Diffstat (limited to 'noncore/net/wellenreiter/libwellenreiter/source/wl_proto.cc') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/net/wellenreiter/libwellenreiter/source/wl_proto.cc132
1 files changed, 132 insertions, 0 deletions
diff --git a/noncore/net/wellenreiter/libwellenreiter/source/wl_proto.cc b/noncore/net/wellenreiter/libwellenreiter/source/wl_proto.cc
new file mode 100644
index 0000000..f15523f
--- a/dev/null
+++ b/noncore/net/wellenreiter/libwellenreiter/source/wl_proto.cc
@@ -0,0 +1,132 @@
1/*
2 * Communication protocol
3 *
4 * $Id$
5 */
6
7#include "wl_proto.hh"
8#include "wl_log.hh"
9#include "wl_sock.hh"
10
11/* Adds a field to the buffer */
12int add_field(char *buffer, char *string, int len)
13{
14 char newlen[5];
15
16 /* 3 Byte = Length */
17 snprintf(newlen, sizeof(newlen) - 1, "%.3d", len);
18 memcpy(buffer, newlen, 3);
19
20 /* Length bytes = Value */
21 memcpy(buffer + 3, string, atoi(newlen));
22
23 /* Return length of attached field */
24 return (atoi(newlen) + 3);
25}
26
27int get_field(const char *buffer, char *out)
28{
29 char len[5];
30
31 /* Get length of value */
32 memcpy(len, buffer, 3);
33
34 /* Copy buffer to out pointer */
35 memset(out, 0, atoi(len) + 1);
36 memcpy(out, buffer + 3, atoi(len));
37
38 return atoi(len) + 3;
39}
40
41/* Send found network to GUI */
42int send_network_found (const char *guihost, int guiport, void *structure)
43{
44 wl_network_t *ptr;
45 char buffer[2048];
46 char temp[128];
47 int retval=0, len=0;
48
49 memset(temp, 0, sizeof(temp));
50
51 ptr = (wl_network_t *)structure;
52
53 /* Type = Found new net (without length field) */
54 memset(temp, 0, sizeof(temp));
55 snprintf(temp, sizeof(temp), "%.2d", NETFOUND);
56 memcpy(buffer, temp, 2);
57 len += 2;
58
59 /* Set Net-type */
60 memset(temp, 0, sizeof(temp));
61 snprintf(temp, sizeof(temp), "%d", ptr->net_type);
62 retval = add_field(buffer + len, temp, 1);
63 len += retval;
64
65 /* Set channel */
66 memset(temp, 0, sizeof(temp));
67 snprintf(temp, sizeof(temp), "%.2d", ptr->channel);
68 retval = add_field(buffer + len, temp, 2);
69 len += retval;
70
71 /* Set WEP y/n */
72 memset(temp, 0, sizeof(temp));
73 snprintf(temp, sizeof(temp), "%d", ptr->wep);
74 retval = add_field(buffer + len, temp, 1);
75 len += retval;
76
77 /* Set Mac */
78 retval = add_field(buffer + len, (char *)ptr->mac, 17);
79 len += retval;
80
81 /* Set ssid */
82 retval = add_field(buffer + len, (char *)ptr->bssid, ptr->ssid_len);
83
84 /* Send prepared buffer to GUI */
85#ifdef DEBUG
86 wl_loginfo("Sending network to GUI: '%s'", buffer);
87#endif
88
89 wl_send(guihost, guiport, buffer);
90
91 return 1;
92}
93
94/* Fill buffer into structur */
95int get_network_found (void *structure, const char *buffer)
96{
97 wl_network_t *ptr;
98 char temp[512];
99 int retval=0, len=0;
100
101 ptr = (wl_network_t *)structure;
102
103 /* packet type already determined */
104 len += 2;
105
106 /* Get net type */
107 memset(temp, 0, sizeof(temp));
108 retval = get_field(buffer + len, temp);
109 len += retval;
110 ptr->net_type = atoi(temp);
111
112 /* Get channel */
113 memset(temp, 0, sizeof(temp));
114 retval = get_field(buffer + len, temp);
115 len += retval;
116 ptr->channel = atoi(temp);
117
118 /* Set WEP y/n */
119 memset(temp, 0, sizeof(temp));
120 retval = get_field(buffer + len, temp);
121 len += retval;
122 ptr->wep = atoi(temp);
123
124 /* Set MAC address */
125 retval = get_field(buffer + len, ptr->mac);
126 len += retval;
127
128 /* Set BSSID */
129 retval = get_field(buffer + len, ptr->bssid);
130
131 return 1;
132}