Merge branch 'master' of ssh://gnunet.org/gnunet
[oweals/gnunet.git] / src / conversation / conversation_api_call.c
index 728b495b37ae57c9c91b6905db74971557880f76..7e4a147a035acf40bc24c326e6ee977685c148c0 100644 (file)
@@ -1,6 +1,6 @@
 /*
   This file is part of GNUnet
-  Copyright (C) 2013 GNUnet e.V.
+  Copyright (C) 2013, 2016 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
@@ -154,7 +154,7 @@ struct GNUNET_CONVERSATION_Call
  * @param call call to reconnect
  */
 static void
-reconnect_call (struct GNUNET_CONVERSATION_Call *call);
+fail_call (struct GNUNET_CONVERSATION_Call *call);
 
 
 /**
@@ -177,8 +177,11 @@ transmit_call_audio (void *cls,
   e = GNUNET_MQ_msg_extra (am,
                            data_size,
                            GNUNET_MESSAGE_TYPE_CONVERSATION_CS_AUDIO);
-  memcpy (&am[1], data, data_size);
-  GNUNET_MQ_send (call->mq, e);
+  GNUNET_memcpy (&am[1],
+                 data,
+                 data_size);
+  GNUNET_MQ_send (call->mq,
+                  e);
 }
 
 
@@ -198,11 +201,11 @@ handle_call_suspend (void *cls,
   {
   case CS_LOOKUP:
     GNUNET_break (0);
-    reconnect_call (call);
+    fail_call (call);
     break;
   case CS_RINGING:
     GNUNET_break_op (0);
-    reconnect_call (call);
+    fail_call (call);
     break;
   case CS_SUSPENDED_CALLER:
     call->state = CS_SUSPENDED_BOTH;
@@ -243,11 +246,11 @@ handle_call_resume (void *cls,
   {
   case CS_LOOKUP:
     GNUNET_break (0);
-    reconnect_call (call);
+    fail_call (call);
     break;
   case CS_RINGING:
     GNUNET_break_op (0);
-    reconnect_call (call);
+    fail_call (call);
     break;
   case CS_SUSPENDED_CALLER:
     GNUNET_break_op (0);
@@ -292,7 +295,7 @@ handle_call_picked_up (void *cls,
   {
   case CS_LOOKUP:
     GNUNET_break (0);
-    reconnect_call (call);
+    fail_call (call);
     break;
   case CS_RINGING:
     call->state = CS_ACTIVE;
@@ -308,7 +311,7 @@ handle_call_picked_up (void *cls,
   case CS_SUSPENDED_BOTH:
   case CS_ACTIVE:
     GNUNET_break (0);
-    reconnect_call (call);
+    fail_call (call);
     break;
   case CS_SHUTDOWN:
     GNUNET_CONVERSATION_call_stop (call);
@@ -335,7 +338,7 @@ handle_call_hangup (void *cls,
   {
   case CS_LOOKUP:
     GNUNET_break (0);
-    reconnect_call (call);
+    fail_call (call);
     break;
   case CS_RINGING:
   case CS_SUSPENDED_CALLER:
@@ -345,7 +348,8 @@ handle_call_hangup (void *cls,
     eh = call->event_handler;
     eh_cls = call->event_handler_cls;
     GNUNET_CONVERSATION_call_stop (call);
-    eh (eh_cls, GNUNET_CONVERSATION_EC_CALL_HUNG_UP);
+    eh (eh_cls,
+        GNUNET_CONVERSATION_EC_CALL_HUNG_UP);
     return;
   case CS_SHUTDOWN:
     GNUNET_CONVERSATION_call_stop (call);
@@ -386,11 +390,11 @@ handle_call_audio (void *cls,
   {
   case CS_LOOKUP:
     GNUNET_break (0);
-    reconnect_call (call);
+    fail_call (call);
     break;
   case CS_RINGING:
     GNUNET_break (0);
-    reconnect_call (call);
+    fail_call (call);
     break;
   case CS_SUSPENDED_CALLER:
     /* can happen: we suspended, other peer did not yet
@@ -442,14 +446,16 @@ handle_gns_response (void *cls,
         GNUNET_break_op (0);
         continue;
       }
-      memcpy (&call->phone_record,
-              rd[i].data,
-              rd[i].data_size);
-      e = GNUNET_MQ_msg (ccm, GNUNET_MESSAGE_TYPE_CONVERSATION_CS_PHONE_CALL);
-      ccm->line = call->phone_record.line;
+      GNUNET_memcpy (&call->phone_record,
+                     rd[i].data,
+                     rd[i].data_size);
+      e = GNUNET_MQ_msg (ccm,
+                         GNUNET_MESSAGE_TYPE_CONVERSATION_CS_PHONE_CALL);
+      ccm->line_port = call->phone_record.line_port;
       ccm->target = call->phone_record.peer;
       ccm->caller_id = *GNUNET_IDENTITY_ego_get_private_key (call->caller_id);
-      GNUNET_MQ_send (call->mq, e);
+      GNUNET_MQ_send (call->mq,
+                      e);
       call->state = CS_RINGING;
       call->event_handler (call->event_handler_cls,
                            GNUNET_CONVERSATION_EC_CALL_RINGING);
@@ -482,17 +488,17 @@ call_error_handler (void *cls,
   }
   GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
               _("Connection to conversation service lost, trying to reconnect\n"));
-  reconnect_call (call);
+  fail_call (call);
 }
 
 
 /**
- * The call got disconnected, reconnect to the service.
+ * The call got disconnected, destroy the handle.
  *
  * @param call call to reconnect
  */
 static void
-reconnect_call (struct GNUNET_CONVERSATION_Call *call)
+fail_call (struct GNUNET_CONVERSATION_Call *call)
 {
   if (CS_ACTIVE == call->state)
   {
@@ -537,34 +543,34 @@ GNUNET_CONVERSATION_call_start (const struct GNUNET_CONFIGURATION_Handle *cfg,
                                GNUNET_CONVERSATION_CallEventHandler event_handler,
                                void *event_handler_cls)
 {
-  GNUNET_MQ_hd_fixed_size (call_suspend,
-                           GNUNET_MESSAGE_TYPE_CONVERSATION_CS_PHONE_SUSPEND,
-                           struct ClientPhoneSuspendMessage);
-  GNUNET_MQ_hd_fixed_size (call_resume,
-                           GNUNET_MESSAGE_TYPE_CONVERSATION_CS_PHONE_RESUME,
-                           struct ClientPhoneResumeMessage);
-  GNUNET_MQ_hd_fixed_size (call_picked_up,
-                           GNUNET_MESSAGE_TYPE_CONVERSATION_CS_PHONE_PICKED_UP,
-                           struct ClientPhonePickedupMessage);
-  GNUNET_MQ_hd_fixed_size (call_hangup,
-                           GNUNET_MESSAGE_TYPE_CONVERSATION_CS_PHONE_HANG_UP,
-                           struct ClientPhoneHangupMessage);
-  GNUNET_MQ_hd_var_size (call_audio,
-                         GNUNET_MESSAGE_TYPE_CONVERSATION_CS_AUDIO,
-                         struct ClientAudioMessage);
   struct GNUNET_CONVERSATION_Call *call
     = GNUNET_new (struct GNUNET_CONVERSATION_Call);
   struct GNUNET_MQ_MessageHandler handlers[] = {
-    make_call_suspend_handler (call),
-    make_call_resume_handler (call),
-    make_call_picked_up_handler (call),
-    make_call_hangup_handler (call),
-    make_call_audio_handler (call),
+    GNUNET_MQ_hd_fixed_size (call_suspend,
+                             GNUNET_MESSAGE_TYPE_CONVERSATION_CS_PHONE_SUSPEND,
+                             struct ClientPhoneSuspendMessage,
+                             call),
+    GNUNET_MQ_hd_fixed_size (call_resume,
+                             GNUNET_MESSAGE_TYPE_CONVERSATION_CS_PHONE_RESUME,
+                             struct ClientPhoneResumeMessage,
+                             call),
+    GNUNET_MQ_hd_fixed_size (call_picked_up,
+                             GNUNET_MESSAGE_TYPE_CONVERSATION_CS_PHONE_PICKED_UP,
+                             struct ClientPhonePickedupMessage,
+                             call),
+    GNUNET_MQ_hd_fixed_size (call_hangup,
+                             GNUNET_MESSAGE_TYPE_CONVERSATION_CS_PHONE_HANG_UP,
+                             struct ClientPhoneHangupMessage,
+                             call),
+    GNUNET_MQ_hd_var_size (call_audio,
+                           GNUNET_MESSAGE_TYPE_CONVERSATION_CS_AUDIO,
+                           struct ClientAudioMessage,
+                           call),
     GNUNET_MQ_handler_end ()
   };
   struct GNUNET_CRYPTO_EcdsaPublicKey my_zone;
 
-  call->mq = GNUNET_CLIENT_connecT (cfg,
+  call->mq = GNUNET_CLIENT_connect (cfg,
                                     "conversation",
                                     handlers,
                                     &call_error_handler,
@@ -597,7 +603,6 @@ GNUNET_CONVERSATION_call_start (const struct GNUNET_CONFIGURATION_Handle *cfg,
                                         &my_zone,
                                         GNUNET_GNSRECORD_TYPE_PHONE,
                                         GNUNET_NO,
-                                        NULL /* FIXME: add shortening support */,
                                         &handle_gns_response, call);
   GNUNET_assert (NULL != call->gns_lookup);
   return call;
@@ -663,8 +668,10 @@ GNUNET_CONVERSATION_call_suspend (struct GNUNET_CONVERSATION_Call *call)
   }
   call->speaker = NULL;
   call->mic = NULL;
-  e = GNUNET_MQ_msg (suspend, GNUNET_MESSAGE_TYPE_CONVERSATION_CS_PHONE_SUSPEND);
-  GNUNET_MQ_send (call->mq, e);
+  e = GNUNET_MQ_msg (suspend,
+                     GNUNET_MESSAGE_TYPE_CONVERSATION_CS_PHONE_SUSPEND);
+  GNUNET_MQ_send (call->mq,
+                  e);
   if (CS_SUSPENDED_CALLER == call->state)
     call->state = CS_SUSPENDED_BOTH;
   else