summaryrefslogtreecommitdiff
path: root/noncore/net/wellenreiter/libwellenreiter/source/proto.cc
blob: a1228e4e17b10552debed4d0ea4eec8a85dc6861 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
/*
 * Communication protocol
 *
 * $Id$
 */

#include "proto.hh"
#include "sock.hh"
#include "log.hh"

/* Send found network to GUI */
int send_network_found (const char *guihost, int guiport, void *structure)
{
  wl_network_t *ptr;
  char buffer[2048];
  char temp[5];

  ptr = (wl_network_t *)structure;

  memset(buffer, 0, 2048);

  /* Type = Found new net */
  memcpy(buffer, "01", 2);

  /* Set Net-type */
  memset(temp, 0, sizeof(temp));
  snprintf(temp, 2, "%d", ptr->net_type);
  memcpy(buffer + 2, temp, 1);

  /* Set channel */
  memset(temp, 0, sizeof(temp));

  if(ptr->channel < 10)
    snprintf(temp, 3, "0%d", ptr->channel);
  else
    snprintf(temp, 3, "%d", ptr->channel);

  memcpy(buffer + 3, temp, 2);

  /* Set WEP y/n */
  memset(temp, 0, sizeof(temp));
  snprintf(temp, 2, "%d", ptr->wep);
  memcpy(buffer + 5, temp, 1);

  /* Set MAC address */
  memcpy(buffer + 6, ptr->mac, 17);

  /* Set lenght of ssid */
  memset(temp, 0, sizeof(temp));

  if(ptr->ssid_len > 99)
    snprintf(temp, 4, "%d", ptr->ssid_len);
  else if(ptr->ssid_len < 10)
    snprintf(temp, 4, "00%d", ptr->ssid_len);
  else
    snprintf(temp, 4, "0%d", ptr->ssid_len);

  memcpy(buffer + 23, temp, 3);

  /* Set ssid */
  memcpy(buffer + 26, ptr->bssid, ptr->ssid_len);

  /* Send prepared buffer to GUI */
#ifdef DEBUG
  wl_loginfo("Sending network to GUI: '%s'", buffer);
#endif

  sendcomm(guihost, guiport, buffer);

  return 1;
}

/* Fill buffer into structur */
int get_network_found (void *structure, const char *buffer)
{
  wl_network_t *ptr;
  char temp[512];

  ptr = (wl_network_t *)structure;

  /* Get net type */
  memset(temp, 0, sizeof(temp));
  memcpy(temp, buffer + 2, 1);
  ptr->net_type = atoi(temp);

  /* Get channel */
  memset(temp, 0, sizeof(temp));
  memcpy(temp, buffer + 3, 2);
  ptr->channel = atoi(temp);

  /* Set WEP y/n */
  memset(temp, 0, sizeof(temp));
  memcpy(temp, buffer + 5, 1);
  ptr->wep = atoi(temp);

  /* Set MAC address */
  memcpy(ptr->mac, buffer + 6, 17);
  ptr->mac[17]='\0';

  /* Set lenght of ssid */
  memset(temp, 0, sizeof(temp));
  memcpy(temp, buffer + 23, 3);
  ptr->ssid_len = atoi(temp);

  /* Set ssid */
  memcpy(ptr->bssid, buffer + 26, ptr->ssid_len + 1);

  return 1;
}