* Should we print (interesting|debug) messages that can happen during
* normal operation?
*/
-#define DEBUG GNUNET_NO
+//#define DEBUG GNUNET_YES
/**
* Maximum size of a GNUnet message (GNUNET_SERVER_MAX_MESSAGE_SIZE)
(NULL == (pipe = _popen (command, "rt"))) )
return EINVAL;
-#ifdef TESTING
+#ifdef DEBUG
fprintf (stderr, "DEBUG: Command output: \n");
char output[LINE_LEN];
while (NULL != fgets (output, sizeof (output), pipe))
*
* @return: TRUE if setup was successful, else FALSE
*/
-static boolean
+static BOOL
setup_interface ()
{
/*
*
* @return: TRUE if destruction was successful, else FALSE
*/
-static boolean
+static BOOL
remove_interface ()
{
SP_REMOVEDEVICE_PARAMS remove;
*
* @return: TRUE if we were able to lookup the interface's name, else FALSE
*/
-static boolean
+static BOOL
resolve_interface_name ()
{
SP_DEVINFO_LIST_DETAIL_DATA device_details;
DWORD len;
int i = 0;
int retrys;
- boolean retval = FALSE;
+ BOOL retval = FALSE;
char adapter[] = INTERFACE_REGISTRY_LOCATION;
/* We can obtain the PNP instance ID from our setupapi handle */
* @param handle the handle to our tap device
* @return TRUE if the version is sufficient, else FALSE
*/
-static boolean
+static BOOL
check_tapw32_version (HANDLE handle)
{
ULONG version[3];
* @param handle the handle to our TAP device
* @return True if the operation succeeded, else false
*/
-static boolean
+static BOOL
tun_up (HANDLE handle)
{
ULONG status = TRUE;
* @param output_facility output pipe or file to hand over data to.
* @return false if an event reset was impossible (OS error), else true
*/
-static boolean
+static BOOL
attempt_read_tap (struct io_facility * input_facility,
struct io_facility * output_facility)
{
struct GNUNET_MessageHeader * hdr;
unsigned short size;
+ BOOL status;
switch (input_facility->facility_state)
{
case IOSTATE_READY:
- {
- BOOL status; // BOOL is winbool, NOT boolean!
+ {
if (!ResetEvent (input_facility->overlapped.hEvent))
{
return FALSE;
// We are queued and should check if the read has finished
case IOSTATE_QUEUED:
{
- BOOL status; // BOOL is winbool, NOT boolean!
-
// there was an operation going on already, check if that has completed now.
status = GetOverlappedResult (input_facility->handle,
&input_facility->overlapped,
}
return TRUE;
case IOSTATE_RESUME:
- {
hdr = (struct GNUNET_MessageHeader *) output_facility->buffer;
size = input_facility->buffer_size + sizeof (struct GNUNET_MessageHeader);
output_facility->facility_state = IOSTATE_READY;
input_facility->facility_state = IOSTATE_READY;
return TRUE;
- }
default:
return TRUE;
}
* @param output_facility output pipe or file to hand over data to.
* @return false if an event reset was impossible (OS error), else true
*/
-static boolean
+static BOOL
attempt_read_stdin (struct io_facility * input_facility,
struct io_facility * output_facility)
{
+ struct GNUNET_MessageHeader * hdr;
+ BOOL status;
switch (input_facility->facility_state)
{
case IOSTATE_READY:
{
- BOOL status; // BOOL is winbool, NOT boolean!
if (!ResetEvent (input_facility->overlapped.hEvent))
return FALSE;
input_facility->buffer_size = 0;
/* Check how the task is handled */
if (status && (sizeof (struct GNUNET_MessageHeader) < input_facility->buffer_size))
{/* async event processed immediately*/
- struct GNUNET_MessageHeader * hdr = (struct GNUNET_MessageHeader *) input_facility->buffer;
+ hdr = (struct GNUNET_MessageHeader *) input_facility->buffer;
/* reset event manually*/
if (!SetEvent (input_facility->overlapped.hEvent))
// We are queued and should check if the read has finished
case IOSTATE_QUEUED:
{
- BOOL status; // BOOL is winbool, NOT boolean!
-
// there was an operation going on already, check if that has completed now.
status = GetOverlappedResult (input_facility->handle,
&input_facility->overlapped,
FALSE);
if (status)
{/* successful return for a queued operation */
- struct GNUNET_MessageHeader * hdr = (struct GNUNET_MessageHeader *) input_facility->buffer;
+ hdr = (struct GNUNET_MessageHeader *) input_facility->buffer;
if (!ResetEvent (input_facility->overlapped.hEvent))
return FALSE;
* @param input_facility input named pipe or file to work with.
* @return false if an event reset was impossible (OS error), else true
*/
-static boolean
+static BOOL
attempt_write (struct io_facility * output_facility,
struct io_facility * input_facility)
{
- BOOL status; // BOOL is winbool, NOT boolean!
+ BOOL status;
switch (output_facility->facility_state)
{
/* we successfully wrote something and now need to reset our reader */
if (IOSTATE_WAITING == input_facility->facility_state)
- input_facility->facility_state = IOSTATE_READY;
+ input_facility->facility_state = IOSTATE_RESUME;
else if (IOSTATE_FAILED == input_facility->facility_state)
output_facility->path_open = FALSE;
}
/* we successfully wrote something and now need to reset our reader */
if (IOSTATE_WAITING == input_facility->facility_state)
- input_facility->facility_state = IOSTATE_READY;
+ input_facility->facility_state = IOSTATE_RESUME;
else if (IOSTATE_FAILED == input_facility->facility_state)
output_facility->path_open = FALSE;
}
* @param signaled if the hEvent created should default to signaled or not
* @return true on success, else false
*/
-static boolean
+static BOOL
initialize_io_facility (struct io_facility * elem,
int initial_state,
BOOL signaled)
tap_read.handle = tap_handle;
tap_write.handle = tap_handle;
+#ifdef DEBUG_TO_CONSOLE
+ /* Debug output to console STDIN/STDOUT*/
+ std_in.handle = parent_std_in_handle;
+ std_out.handle = parent_std_out_handle;
+#else
+
/*
* Find out the types of our handles.
* This part is a problem, because in windows we need to handle files,
fprintf (stderr, "FATAL: Could not reopen stdout for in overlapped mode, has to be a named pipe!\n");
goto teardown;
}
-
+#endif
+
while (std_out.path_open || tap_write.path_open)
{
/* perform READ from stdin if possible */
- if (std_in.path_open && tap_write.path_open && (!attempt_read_stdin (&std_in, &tap_write)))
+ if (std_in.path_open && (!attempt_read_stdin (&std_in, &tap_write)))
break;
/* perform READ from tap if possible */
- if (tap_read.path_open && std_out.path_open && (!attempt_read_tap (&tap_read, &std_out)))
+ if (tap_read.path_open && (!attempt_read_tap (&tap_read, &std_out)))
break;
/* perform WRITE to tap if possible */
*
* @param argc must be 6
* @param argv 0: binary name (gnunet-helper-vpn)
- * 1: tunnel interface name (gnunet-vpn)
+ * 1: tunnel interface prefix (gnunet-vpn)
* 2: IPv6 address (::1), "-" to disable
* 3: IPv6 netmask length in bits (64), ignored if #2 is "-"
* 4: IPv4 address (1.2.3.4), "-" to disable
char hwid[LINE_LEN];
HANDLE handle;
int global_ret = 0;
- boolean have_ip4 = FALSE;
- boolean have_ip6 = FALSE;
+ BOOL have_ip4 = FALSE;
+ BOOL have_ip6 = FALSE;
if (6 != argc)
{
- fprintf (stderr, "FATAL: must supply 5 arguments!\n");
+ fprintf (stderr, "FATAL: must supply 5 arguments!\nUsage:\ngnunet-helper-vpn <if name prefix> <address6 or \"-\"> <netbits6> <address4 or \"-\"> <netmask4>\n", argv[0]);
return 1;
}