/*
This file is part of GNUnet.
- (C) 2013 Christian Grothoff (and other contributing authors)
+ Copyright (C) 2013 GNUnet e.V.
GNUnet is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
You should have received a copy of the GNU General Public License
along with GNUnet; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
*/
/**
* @file conversation/gnunet-conversation.c
};
-
/**
* List of incoming calls
*/
/**
* Caller handle (for active incoming call).
+ * This call handler is NOT in the #cl_head / #cl_tail list.
*/
static struct CallList *cl_active;
static struct CallList *cl_tail;
/**
- * Desired phone line.
+ * Desired phone line (string to be converted to a hash).
*/
-static unsigned int line;
+static char *line;
/**
* Task which handles the commands
*/
-static GNUNET_SCHEDULER_TaskIdentifier handle_cmd_task;
+static struct GNUNET_SCHEDULER_Task * handle_cmd_task;
/**
* Our speaker.
{
case GNUNET_CONVERSATION_EC_PHONE_RING:
FPRINTF (stdout,
- _("Incoming call from `%s'. Please /accept #%u or /cancel %u the call.\n"),
+ _("Incoming call from `%s'. Please /accept %u or /cancel %u the call.\n"),
GNUNET_GNSRECORD_pkey_to_zkey (caller_id),
caller_num_gen,
caller_num_gen);
for (cl = cl_head; NULL != cl; cl = cl->next)
if (caller == cl->caller)
break;
+ if ( (NULL == cl) &&
+ (caller == cl_active->caller) )
+ cl = cl_active;
if (NULL == cl)
{
GNUNET_break (0);
FPRINTF (stdout,
_("Call from `%s' terminated\n"),
GNUNET_GNSRECORD_pkey_to_zkey (&cl->caller_id));
- GNUNET_CONTAINER_DLL_remove (cl_head,
- cl_tail,
- cl);
if (cl == cl_active)
{
cl_active = NULL;
phone_state = PS_LISTEN;
}
+ else
+ {
+ GNUNET_CONTAINER_DLL_remove (cl_head,
+ cl_tail,
+ cl);
+ }
GNUNET_free (cl);
break;
}
GNUNET_assert (NULL == phone);
phone = GNUNET_CONVERSATION_phone_create (cfg,
my_caller_id,
- &phone_event_handler, NULL);
+ &phone_event_handler,
+ NULL);
/* FIXME: get record and print full GNS record info later here... */
if (NULL == phone)
{
rd.data,
rd.data_size);
FPRINTF (stdout,
- _("Phone active on line %u. Type `/help' for a list of available commands\n"),
- (unsigned int) line);
+ _("Phone active at `%s'. Type `/help' for a list of available commands\n"),
+ address);
phone_state = PS_LISTEN;
}
}
case GNUNET_CONVERSATION_EC_CALL_ERROR:
FPRINTF (stdout,
_("Error with the call, restarting it\n"));
- call_state = CS_RESOLVING;
- // FIXME: is this correct?
+ GNUNET_free (peer_name);
+ peer_name = NULL;
+ call = NULL;
break;
}
}
break;
case PS_LISTEN:
FPRINTF (stdout,
- _("We are listening for incoming calls for ego `%s' on line %u.\n"),
+ _("We are listening for incoming calls for ego `%s' on line `%s'.\n"),
ego_name,
line);
break;
* Task run during shutdown.
*
* @param cls NULL
- * @param tc unused
*/
static void
-do_stop_task (void *cls,
- const struct GNUNET_SCHEDULER_TaskContext *tc)
+do_stop_task (void *cls)
{
#ifdef WINDOWS
if (NULL != stdin_hlp)
GNUNET_CONVERSATION_phone_destroy (phone);
phone = NULL;
}
- if (GNUNET_SCHEDULER_NO_TASK != handle_cmd_task)
+ if (NULL != handle_cmd_task)
{
GNUNET_SCHEDULER_cancel (handle_cmd_task);
- handle_cmd_task = GNUNET_SCHEDULER_NO_TASK;
+ handle_cmd_task = NULL;
}
if (NULL != id)
{
strlen (commands[i].command))))
i++;
ptr = &message[strlen (commands[i].command)];
- while (isspace ((int) *ptr))
+ while (isspace ((unsigned char) *ptr))
ptr++;
if ('\0' == *ptr)
ptr = NULL;
* Task to handle commands from the terminal.
*
* @param cls NULL
- * @param tc scheduler context
*/
static void
-handle_command (void *cls,
- const struct GNUNET_SCHEDULER_TaskContext *tc)
+handle_command (void *cls)
{
char message[MAX_MESSAGE_LENGTH + 1];
return;
}
my_caller_id = ego;
- GNUNET_CONFIGURATION_set_value_number (cfg,
+ GNUNET_CONFIGURATION_set_value_string (cfg,
"CONVERSATION",
"LINE",
line);
handle_cmd_task =
GNUNET_SCHEDULER_add_with_priority (GNUNET_SCHEDULER_PRIORITY_UI,
&handle_command, NULL);
- GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &do_stop_task,
- NULL);
+ GNUNET_SCHEDULER_add_shutdown (&do_stop_task,
+ NULL);
}
int
main (int argc, char *const *argv)
{
- static const struct GNUNET_GETOPT_CommandLineOption options[] = {
- {'e', "ego", "NAME",
- gettext_noop ("sets the NAME of the ego to use for the phone (and name resolution)"),
- 1, &GNUNET_GETOPT_set_string, &ego_name},
- {'p', "phone", "LINE",
- gettext_noop ("sets the LINE to use for the phone"),
- 1, &GNUNET_GETOPT_set_uint, &line},
+ struct GNUNET_GETOPT_CommandLineOption options[] = {
+
+ GNUNET_GETOPT_option_string ('e',
+ "ego",
+ "NAME",
+ gettext_noop ("sets the NAME of the ego to use for the phone (and name resolution)"),
+ &ego_name),
+
+ GNUNET_GETOPT_option_string ('p',
+ "phone",
+ "LINE",
+ gettext_noop ("sets the LINE to use for the phone"),
+ &line),
+
GNUNET_GETOPT_OPTION_END
};
int ret;