more work on loopback, this time payload transmission (for now without flow control)
authorChristian Grothoff <christian@grothoff.org>
Mon, 23 Jan 2017 13:42:23 +0000 (14:42 +0100)
committerChristian Grothoff <christian@grothoff.org>
Mon, 23 Jan 2017 13:42:23 +0000 (14:42 +0100)
src/cadet/gnunet-service-cadet-new_channel.c

index 3d52c67af15fc9f8e7e1bb88208403a87ebd5786..673921458b7c6098dd6c2fbec0feb50b864a1422 100644 (file)
@@ -1350,8 +1350,24 @@ GCCH_handle_local_data (struct CadetChannel *ch,
 
   if (GNUNET_YES == ch->is_loopback)
   {
-    GNUNET_break (0); // fIXME: not implemented
-    return GNUNET_SYSERR;
+    struct CadetClient *receiver;
+    struct GNUNET_MQ_Envelope *env;
+    struct GNUNET_CADET_LocalData *ld;
+
+    env = GNUNET_MQ_msg_extra (ld,
+                               buf_len,
+                               GNUNET_MESSAGE_TYPE_CADET_LOCAL_DATA);
+    receiver = (ch->owner == sender) ? ch->dest : ch->owner;
+    ld->ccn = (ch->owner == sender) ? ch->ccn_dest : ch->ccn_owner;
+    GNUNET_memcpy (&ld[1],
+                   buf,
+                   buf_len);
+    /* FIXME: this does not provide for flow control! */
+    GSC_send_to_client (receiver,
+                        env);
+    send_ack_to_client (ch,
+                        sender);
+    return GNUNET_OK;
   }
 
   /* Everything is correct, send the message. */