*/
struct CadetClient
{
- /**
- * Linked list next
- */
+ /**
+ * Linked list next
+ */
struct CadetClient *next;
- /**
- * Linked list prev
- */
+ /**
+ * Linked list prev
+ */
struct CadetClient *prev;
- /**
- * Tunnels that belong to this client, indexed by local id
- */
+ /**
+ * Tunnels that belong to this client, indexed by local id
+ */
struct GNUNET_CONTAINER_MultiHashMap32 *own_channels;
- /**
- * Tunnels this client has accepted, indexed by incoming local id
- */
+ /**
+ * Tunnels this client has accepted, indexed by incoming local id
+ */
struct GNUNET_CONTAINER_MultiHashMap32 *incoming_channels;
- /**
- * Channel ID for the next incoming channel.
- */
- CADET_ChannelNumber next_chid;
+ /**
+ * Channel ID for the next incoming channel.
+ */
+ struct GNUNET_CADET_ClientChannelNumber next_ccn;
- /**
- * Handle to communicate with the client
- */
+ /**
+ * Handle to communicate with the client
+ */
struct GNUNET_SERVER_Client *handle;
- /**
- * Ports that this client has declared interest in.
- * Indexed by port, contains *Client.
- */
+ /**
+ * Ports that this client has declared interest in.
+ * Indexed by port, contains *Client.
+ */
struct GNUNET_CONTAINER_MultiHashMap *ports;
- /**
- * Whether the client is active or shutting down (don't send confirmations
- * to a client that is shutting down.
- */
+ /**
+ * Whether the client is active or shutting down (don't send confirmations
+ * to a client that is shutting down.
+ */
int shutting_down;
- /**
- * ID of the client, mainly for debug messages
- */
+ /**
+ * ID of the client, mainly for debug messages
+ */
unsigned int id;
};
* @param key Port.
* @param value Client structure.
*
- * @return GNUNET_OK, keep iterating.
+ * @return #GNUNET_OK, keep iterating.
*/
static int
client_release_ports (void *cls,
* @param key The local channel id (used to access the hashmap).
* @param value The value stored at the key (channel to destroy).
*
- * @return GNUNET_OK, keep iterating.
+ * @return #GNUNET_OK, keep iterating.
*/
static int
channel_destroy_iterator (void *cls,
" Channel %s destroy, due to client %s shutdown.\n",
GCCH_2s (ch), GML_2s (c));
- GCCH_handle_local_destroy (ch, c, key < GNUNET_CADET_LOCAL_CHANNEL_ID_SERV);
+ GCCH_handle_local_destroy (ch,
+ c,
+ key < GNUNET_CADET_LOCAL_CHANNEL_ID_CLI);
return GNUNET_OK;
}
GNUNET_free (c);
}
+
/**
* Create a client record, register data and initialize memory.
*
c = GNUNET_new (struct CadetClient);
c->handle = client;
c->id = next_client_id++; /* overflow not important: just for debug */
- c->next_chid = GNUNET_CADET_LOCAL_CHANNEL_ID_SERV;
c->own_channels = GNUNET_CONTAINER_multihashmap32_create (32);
c->incoming_channels = GNUNET_CONTAINER_multihashmap32_create (32);
handle_port_close (void *cls, struct GNUNET_SERVER_Client *client,
const struct GNUNET_MessageHeader *message)
{
- // FIXME
+ struct CadetClient *c;
+ struct GNUNET_CADET_PortMessage *pmsg;
+ int removed;
+
+ LOG (GNUNET_ERROR_TYPE_DEBUG, "close port requested\n");
+
+ /* Sanity check for client registration */
+ if (NULL == (c = GML_client_get (client)))
+ {
+ GNUNET_break (0);
+ GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
+ return;
+ }
+ LOG (GNUNET_ERROR_TYPE_DEBUG, " by client %u\n", c->id);
+
+ /* Message size sanity check */
+ if (sizeof (struct GNUNET_CADET_PortMessage) != ntohs (message->size))
+ {
+ GNUNET_break (0);
+ GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
+ return;
+ }
+
+ pmsg = (struct GNUNET_CADET_PortMessage *) message;
+ removed = GNUNET_CONTAINER_multihashmap_remove (c->ports, &pmsg->port, c);
+ GNUNET_break_op (GNUNET_YES == removed);
+ removed = GNUNET_CONTAINER_multihashmap_remove (ports, &pmsg->port, c);
+ GNUNET_break_op (GNUNET_YES == removed);
+
+ GNUNET_SERVER_receive_done (client, GNUNET_OK);
}
LOG (GNUNET_ERROR_TYPE_DEBUG, " by client %u\n", c->id);
/* Message size sanity check */
- if (sizeof (struct GNUNET_CADET_ChannelCreateMessage)
+ if (sizeof (struct GNUNET_CADET_LocalChannelCreateMessage)
!= ntohs (message->size))
{
GNUNET_break (0);
if (GNUNET_OK !=
GCCH_handle_local_create (c,
- (struct GNUNET_CADET_ChannelCreateMessage *)
+ (struct GNUNET_CADET_LocalChannelCreateMessage *)
message))
{
GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
handle_channel_destroy (void *cls, struct GNUNET_SERVER_Client *client,
const struct GNUNET_MessageHeader *message)
{
- struct GNUNET_CADET_ChannelDestroyMessage *msg;
+ const struct GNUNET_CADET_LocalChannelDestroyMessage *msg;
struct CadetClient *c;
struct CadetChannel *ch;
- CADET_ChannelNumber chid;
+ struct GNUNET_CADET_ClientChannelNumber ccn;
LOG (GNUNET_ERROR_TYPE_DEBUG, "Got a DESTROY CHANNEL from client!\n");
LOG (GNUNET_ERROR_TYPE_DEBUG, " by client %u\n", c->id);
/* Message sanity check */
- if (sizeof (struct GNUNET_CADET_ChannelDestroyMessage)
+ if (sizeof (struct GNUNET_CADET_LocalChannelDestroyMessage)
!= ntohs (message->size))
{
GNUNET_break (0);
return;
}
- msg = (struct GNUNET_CADET_ChannelDestroyMessage *) message;
+ msg = (const struct GNUNET_CADET_LocalChannelDestroyMessage *) message;
/* Retrieve tunnel */
- chid = ntohl (msg->channel_id);
- ch = GML_channel_get (c, chid);
+ ccn = msg->ccn;
+ ch = GML_channel_get (c, ccn);
LOG (GNUNET_ERROR_TYPE_INFO, "Client %u is destroying channel %X\n",
- c->id, chid);
+ c->id, ccn);
if (NULL == ch)
{
- LOG (GNUNET_ERROR_TYPE_WARNING, " channel %X not found\n", chid);
+ LOG (GNUNET_ERROR_TYPE_WARNING, " channel %X not found\n", ccn);
GNUNET_STATISTICS_update (stats,
"# client destroy messages on unknown channel",
1, GNUNET_NO);
return;
}
- GCCH_handle_local_destroy (ch, c, chid < GNUNET_CADET_LOCAL_CHANNEL_ID_SERV);
+ GCCH_handle_local_destroy (ch,
+ c,
+ ntohl (ccn.channel_of_client) < GNUNET_CADET_LOCAL_CHANNEL_ID_CLI);
GNUNET_SERVER_receive_done (client, GNUNET_OK);
- return;
}
struct GNUNET_CADET_LocalData *msg;
struct CadetClient *c;
struct CadetChannel *ch;
- CADET_ChannelNumber chid;
+ struct GNUNET_CADET_ClientChannelNumber ccn;
size_t message_size;
size_t payload_size;
size_t payload_claimed_size;
return;
}
- chid = ntohl (msg->id);
+ ccn = msg->ccn;
LOG (GNUNET_ERROR_TYPE_DEBUG, " %u bytes (%u payload) by client %u\n",
payload_size, payload_claimed_size, c->id);
/* Channel exists? */
- fwd = chid < GNUNET_CADET_LOCAL_CHANNEL_ID_SERV;
- ch = GML_channel_get (c, chid);
+ fwd = ntohl (ccn.channel_of_client) >= GNUNET_CADET_LOCAL_CHANNEL_ID_CLI;
+ ch = GML_channel_get (c, ccn);
if (NULL == ch)
{
GNUNET_STATISTICS_update (stats,
struct GNUNET_CADET_LocalAck *msg;
struct CadetChannel *ch;
struct CadetClient *c;
- CADET_ChannelNumber chid;
+ struct GNUNET_CADET_ClientChannelNumber ccn;
int fwd;
LOG (GNUNET_ERROR_TYPE_DEBUG, "\n");
msg = (struct GNUNET_CADET_LocalAck *) message;
/* Channel exists? */
- chid = ntohl (msg->channel_id);
- LOG (GNUNET_ERROR_TYPE_DEBUG, " on channel %X\n", chid);
- ch = GML_channel_get (c, chid);
+ ccn = msg->ccn;
+ LOG (GNUNET_ERROR_TYPE_DEBUG, " on channel %X\n",
+ ntohl (ccn.channel_of_client));
+ ch = GML_channel_get (c, ccn);
LOG (GNUNET_ERROR_TYPE_DEBUG, " -- ch %p\n", ch);
if (NULL == ch)
{
- LOG (GNUNET_ERROR_TYPE_DEBUG, "Channel %X unknown.\n", chid);
+ LOG (GNUNET_ERROR_TYPE_DEBUG,
+ "Channel %X unknown.\n",
+ ntohl (ccn.channel_of_client));
LOG (GNUNET_ERROR_TYPE_DEBUG, " for client %u.\n", c->id);
GNUNET_STATISTICS_update (stats,
"# client ack messages on unknown channel",
/* If client is root, the ACK is going FWD, therefore this is "BCK ACK". */
/* If client is dest, the ACK is going BCK, therefore this is "FWD ACK" */
- fwd = chid >= GNUNET_CADET_LOCAL_CHANNEL_ID_SERV;
+ fwd = ntohl (ccn.channel_of_client) < GNUNET_CADET_LOCAL_CHANNEL_ID_CLI;
GCCH_handle_local_ack (ch, fwd);
GNUNET_SERVER_receive_done (client, GNUNET_OK);
-
- return;
}
struct CadetPeer *p = value;
struct CadetTunnel *t;
- GCP_debug (p, GNUNET_ERROR_TYPE_ERROR);
-
t = GCP_get_tunnel (p);
if (NULL != t)
GCT_debug (t, GNUNET_ERROR_TYPE_ERROR);
iter_connection (void *cls, struct CadetConnection *c)
{
struct GNUNET_CADET_LocalInfoTunnel *msg = cls;
- struct GNUNET_CADET_Hash *h = (struct GNUNET_CADET_Hash *) &msg[1];
+ struct GNUNET_CADET_ConnectionTunnelIdentifier *h;
+ h = (struct GNUNET_CADET_ConnectionTunnelIdentifier *) &msg[1];
h[msg->connections] = *(GCC_get_id (c));
msg->connections++;
}
iter_channel (void *cls, struct CadetChannel *ch)
{
struct GNUNET_CADET_LocalInfoTunnel *msg = cls;
- struct GNUNET_CADET_Hash *h = (struct GNUNET_CADET_Hash *) &msg[1];
- CADET_ChannelNumber *chn = (CADET_ChannelNumber *) &h[msg->connections];
+ struct GNUNET_CADET_ConnectionTunnelIdentifier *h = (struct GNUNET_CADET_ConnectionTunnelIdentifier *) &msg[1];
+ struct GNUNET_CADET_ChannelTunnelNumber *chn = (struct GNUNET_CADET_ChannelTunnelNumber *) &h[msg->connections];
- chn[msg->channels] = htonl (GCCH_get_id (ch));
+ chn[msg->channels] = GCCH_get_id (ch);
msg->channels++;
}
c_n = GCT_count_any_connections (t);
size = sizeof (struct GNUNET_CADET_LocalInfoTunnel);
- size += c_n * sizeof (struct GNUNET_CADET_Hash);
- size += ch_n * sizeof (CADET_ChannelNumber);
+ size += c_n * sizeof (struct GNUNET_CADET_ConnectionTunnelIdentifier);
+ size += ch_n * sizeof (struct GNUNET_CADET_ChannelTunnelNumber);
resp = GNUNET_malloc (size);
resp->header.type = htons (GNUNET_MESSAGE_TYPE_CADET_LOCAL_INFO_TUNNEL);
sizeof (struct GNUNET_CADET_PortMessage)},
{&handle_port_close, NULL, GNUNET_MESSAGE_TYPE_CADET_LOCAL_PORT_CLOSE,
sizeof (struct GNUNET_CADET_PortMessage)},
- {&handle_channel_create, NULL, GNUNET_MESSAGE_TYPE_CADET_CHANNEL_CREATE,
- sizeof (struct GNUNET_CADET_ChannelCreateMessage)},
- {&handle_channel_destroy, NULL, GNUNET_MESSAGE_TYPE_CADET_CHANNEL_DESTROY,
- sizeof (struct GNUNET_CADET_ChannelDestroyMessage)},
+ {&handle_channel_create, NULL, GNUNET_MESSAGE_TYPE_CADET_LOCAL_CHANNEL_CREATE,
+ sizeof (struct GNUNET_CADET_LocalChannelCreateMessage)},
+ {&handle_channel_destroy, NULL, GNUNET_MESSAGE_TYPE_CADET_LOCAL_CHANNEL_DESTROY,
+ sizeof (struct GNUNET_CADET_LocalChannelDestroyMessage)},
{&handle_data, NULL, GNUNET_MESSAGE_TYPE_CADET_LOCAL_DATA, 0},
{&handle_ack, NULL, GNUNET_MESSAGE_TYPE_CADET_LOCAL_ACK,
sizeof (struct GNUNET_CADET_LocalAck)},
* Get a channel from a client.
*
* @param c Client to check.
- * @param chid Channel ID, must be local (> 0x800...).
+ * @param ccn Channel ID, must be local (> 0x800...).
*
* @return non-NULL if channel exists in the clients lists
*/
struct CadetChannel *
-GML_channel_get (struct CadetClient *c, CADET_ChannelNumber chid)
+GML_channel_get (struct CadetClient *c,
+ struct GNUNET_CADET_ClientChannelNumber ccn)
{
struct GNUNET_CONTAINER_MultiHashMap32 *map;
- if (0 == (chid & GNUNET_CADET_LOCAL_CHANNEL_ID_CLI))
- {
- GNUNET_break_op (0);
- LOG (GNUNET_ERROR_TYPE_DEBUG, "CHID %X not a local chid\n", chid);
- return NULL;
- }
-
- if (chid >= GNUNET_CADET_LOCAL_CHANNEL_ID_SERV)
- map = c->incoming_channels;
- else if (chid >= GNUNET_CADET_LOCAL_CHANNEL_ID_CLI)
+ if (ntohl (ccn.channel_of_client) >= GNUNET_CADET_LOCAL_CHANNEL_ID_CLI)
map = c->own_channels;
else
- {
- GNUNET_break (0);
- map = NULL;
- }
+ map = c->incoming_channels;
+
if (NULL == map)
{
GNUNET_break (0);
LOG (GNUNET_ERROR_TYPE_DEBUG,
- "Client %s does no t have a valid map for CHID %X\n",
- GML_2s (c), chid);
+ "Client %s does no t have a valid map for CCN %X\n",
+ GML_2s (c), ccn);
return NULL;
}
- return GNUNET_CONTAINER_multihashmap32_get (map, chid);
+ return GNUNET_CONTAINER_multihashmap32_get (map,
+ ccn.channel_of_client);
}
* Add a channel to a client
*
* @param client Client.
- * @param chid Channel ID.
+ * @param ccn Channel ID.
* @param ch Channel.
*/
void
GML_channel_add (struct CadetClient *client,
- uint32_t chid,
+ struct GNUNET_CADET_ClientChannelNumber ccn,
struct CadetChannel *ch)
{
- if (chid >= GNUNET_CADET_LOCAL_CHANNEL_ID_SERV)
- GNUNET_CONTAINER_multihashmap32_put (client->incoming_channels, chid, ch,
- GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY);
- else if (chid >= GNUNET_CADET_LOCAL_CHANNEL_ID_CLI)
- GNUNET_CONTAINER_multihashmap32_put (client->own_channels, chid, ch,
+ if (ntohl (ccn.channel_of_client) >= GNUNET_CADET_LOCAL_CHANNEL_ID_CLI)
+ GNUNET_CONTAINER_multihashmap32_put (client->own_channels,
+ ccn.channel_of_client,
+ ch,
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY);
else
- GNUNET_break (0);
+ GNUNET_CONTAINER_multihashmap32_put (client->incoming_channels,
+ ccn.channel_of_client,
+ ch,
+ GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY);
}
* Remove a channel from a client.
*
* @param client Client.
- * @param chid Channel ID.
+ * @param ccn Channel ID.
* @param ch Channel.
*/
void
GML_channel_remove (struct CadetClient *client,
- uint32_t chid,
+ struct GNUNET_CADET_ClientChannelNumber ccn,
struct CadetChannel *ch)
{
- if (GNUNET_CADET_LOCAL_CHANNEL_ID_SERV <= chid)
- GNUNET_break (GNUNET_YES ==
- GNUNET_CONTAINER_multihashmap32_remove (client->incoming_channels,
- chid, ch));
- else if (GNUNET_CADET_LOCAL_CHANNEL_ID_CLI <= chid)
- GNUNET_break (GNUNET_YES ==
- GNUNET_CONTAINER_multihashmap32_remove (client->own_channels,
- chid, ch));
+ if (ntohl (ccn.channel_of_client) >= GNUNET_CADET_LOCAL_CHANNEL_ID_CLI)
+ GNUNET_CONTAINER_multihashmap32_remove (client->own_channels,
+ ccn.channel_of_client,
+ ch);
else
- GNUNET_break (0);
+ GNUNET_CONTAINER_multihashmap32_remove (client->incoming_channels,
+ ccn.channel_of_client,
+ ch);
}
*
* @return LID of a channel free to use.
*/
-CADET_ChannelNumber
-GML_get_next_chid (struct CadetClient *c)
+struct GNUNET_CADET_ClientChannelNumber
+GML_get_next_ccn (struct CadetClient *c)
{
- CADET_ChannelNumber chid;
+ struct GNUNET_CADET_ClientChannelNumber ccn;
- while (NULL != GML_channel_get (c, c->next_chid))
+ while (NULL != GML_channel_get (c,
+ c->next_ccn))
{
- LOG (GNUNET_ERROR_TYPE_DEBUG, "Channel %u exists...\n", c->next_chid);
- c->next_chid = (c->next_chid + 1) | GNUNET_CADET_LOCAL_CHANNEL_ID_SERV;
+ LOG (GNUNET_ERROR_TYPE_DEBUG,
+ "Channel %u exists...\n",
+ c->next_ccn);
+ c->next_ccn.channel_of_client
+ = htonl (1 + (ntohl (c->next_ccn.channel_of_client)));
+ if (ntohl (c->next_ccn.channel_of_client) >=
+ GNUNET_CADET_LOCAL_CHANNEL_ID_CLI)
+ c->next_ccn.channel_of_client = htonl (0);
}
- chid = c->next_chid;
- c->next_chid = (c->next_chid + 1) | GNUNET_CADET_LOCAL_CHANNEL_ID_SERV;
+ ccn = c->next_ccn;
+ c->next_ccn.channel_of_client
+ = htonl (1 + (ntohl (c->next_ccn.channel_of_client)));
- return chid;
+ return ccn;
}
{
if (NULL == client)
return NULL;
- return GNUNET_SERVER_client_get_user_context (client, struct CadetClient);
+ return GNUNET_SERVER_client_get_user_context (client,
+ struct CadetClient);
}
+
/**
* Find a client that has opened a port
*
void
GML_client_delete_channel (struct CadetClient *c,
struct CadetChannel *ch,
- CADET_ChannelNumber id)
+ struct GNUNET_CADET_ClientChannelNumber id)
{
int res;
- if (GNUNET_CADET_LOCAL_CHANNEL_ID_SERV <= id)
- {
- res = GNUNET_CONTAINER_multihashmap32_remove (c->incoming_channels,
- id, ch);
- if (GNUNET_YES != res)
- LOG (GNUNET_ERROR_TYPE_DEBUG, "client_delete_channel dest KO\n");
- }
- else if (GNUNET_CADET_LOCAL_CHANNEL_ID_CLI <= id)
+ if (ntohl (id.channel_of_client) >= GNUNET_CADET_LOCAL_CHANNEL_ID_CLI)
{
res = GNUNET_CONTAINER_multihashmap32_remove (c->own_channels,
- id, ch);
+ id.channel_of_client,
+ ch);
if (GNUNET_YES != res)
LOG (GNUNET_ERROR_TYPE_DEBUG, "client_delete_tunnel root KO\n");
}
else
{
- GNUNET_break (0);
+ res = GNUNET_CONTAINER_multihashmap32_remove (c->incoming_channels,
+ id.channel_of_client,
+ ch);
+ if (GNUNET_YES != res)
+ LOG (GNUNET_ERROR_TYPE_DEBUG, "client_delete_channel dest KO\n");
}
}
* If the client was already allowed to send data, do nothing.
*
* @param c Client to whom send the ACK.
- * @param id Channel ID to use
+ * @param ccn Channel ID to use
*/
void
-GML_send_ack (struct CadetClient *c, CADET_ChannelNumber id)
+GML_send_ack (struct CadetClient *c,
+ struct GNUNET_CADET_ClientChannelNumber ccn)
{
struct GNUNET_CADET_LocalAck msg;
LOG (GNUNET_ERROR_TYPE_DEBUG,
- "send local %s ack on %X towards %p\n",
- id < GNUNET_CADET_LOCAL_CHANNEL_ID_SERV ? "FWD" : "BCK", id, c);
+ "send local %s ack on %X towards %p\n",
+ ntohl (ccn.channel_of_client) < GNUNET_CADET_LOCAL_CHANNEL_ID_CLI
+ ? "FWD" : "BCK",
+ ntohl (ccn.channel_of_client),
+ c);
msg.header.size = htons (sizeof (msg));
msg.header.type = htons (GNUNET_MESSAGE_TYPE_CADET_LOCAL_ACK);
- msg.channel_id = htonl (id);
+ msg.ccn = ccn;
GNUNET_SERVER_notification_context_unicast (nc,
c->handle,
&msg.header,
* Notify the client that a new incoming channel was created.
*
* @param c Client to notify.
- * @param id Channel ID.
+ * @param ccn Channel ID.
* @param port Channel's destination port.
* @param opt Options (bit array).
* @param peer Origin peer.
*/
void
GML_send_channel_create (struct CadetClient *c,
- uint32_t id, struct GNUNET_HashCode *port,
- uint32_t opt, const struct GNUNET_PeerIdentity *peer)
+ struct GNUNET_CADET_ClientChannelNumber ccn,
+ const struct GNUNET_HashCode *port,
+ uint32_t opt,
+ const struct GNUNET_PeerIdentity *peer)
{
- struct GNUNET_CADET_ChannelCreateMessage msg;
+ struct GNUNET_CADET_LocalChannelCreateMessage msg;
msg.header.size = htons (sizeof (msg));
- msg.header.type = htons (GNUNET_MESSAGE_TYPE_CADET_CHANNEL_CREATE);
- msg.channel_id = htonl (id);
+ msg.header.type = htons (GNUNET_MESSAGE_TYPE_CADET_LOCAL_CHANNEL_CREATE);
+ msg.ccn = ccn;
msg.port = *port;
msg.opt = htonl (opt);
msg.peer = *peer;
* Build a local channel NACK message and send it to a local client.
*
* @param c Client to whom send the NACK.
- * @param id Channel ID to use
+ * @param ccn Channel ID to use
*/
void
-GML_send_channel_nack (struct CadetClient *c, CADET_ChannelNumber id)
+GML_send_channel_nack (struct CadetClient *c,
+ struct GNUNET_CADET_ClientChannelNumber ccn)
{
struct GNUNET_CADET_LocalAck msg;
LOG (GNUNET_ERROR_TYPE_DEBUG,
"send local nack on %X towards %p\n",
- id, c);
+ ntohl (ccn.channel_of_client),
+ c);
msg.header.size = htons (sizeof (msg));
- msg.header.type = htons (GNUNET_MESSAGE_TYPE_CADET_CHANNEL_NACK);
- msg.channel_id = htonl (id);
+ msg.header.type = htons (GNUNET_MESSAGE_TYPE_CADET_CHANNEL_OPEN_NACK_DEPRECATED);
+ msg.ccn = ccn;
GNUNET_SERVER_notification_context_unicast (nc,
c->handle,
&msg.header,
* Notify a client that a channel is no longer valid.
*
* @param c Client.
- * @param id ID of the channel that is destroyed.
+ * @param ccn ID of the channel that is destroyed.
*/
void
-GML_send_channel_destroy (struct CadetClient *c, uint32_t id)
+GML_send_channel_destroy (struct CadetClient *c,
+ struct GNUNET_CADET_ClientChannelNumber ccn)
{
- struct GNUNET_CADET_ChannelDestroyMessage msg;
+ struct GNUNET_CADET_LocalChannelDestroyMessage msg;
if (NULL == c)
{
if (GNUNET_YES == c->shutting_down)
return;
msg.header.size = htons (sizeof (msg));
- msg.header.type = htons (GNUNET_MESSAGE_TYPE_CADET_CHANNEL_DESTROY);
- msg.channel_id = htonl (id);
+ msg.header.type = htons (GNUNET_MESSAGE_TYPE_CADET_LOCAL_CHANNEL_DESTROY);
+ msg.ccn = ccn;
GNUNET_SERVER_notification_context_unicast (nc, c->handle,
&msg.header, GNUNET_NO);
}
*
* @param c Client to send to.
* @param msg Message to modify and send.
- * @param id Channel ID to use (c can be both owner and client).
+ * @param ccn Channel ID to use (c can be both owner and client).
*/
void
GML_send_data (struct CadetClient *c,
- const struct GNUNET_CADET_Data *msg,
- CADET_ChannelNumber id)
+ const struct GNUNET_CADET_ChannelAppDataMessage *msg,
+ struct GNUNET_CADET_ClientChannelNumber ccn)
{
struct GNUNET_CADET_LocalData *copy;
- uint16_t size = ntohs (msg->header.size) - sizeof (struct GNUNET_CADET_Data);
+ uint16_t size = ntohs (msg->header.size) - sizeof (struct GNUNET_CADET_ChannelAppDataMessage);
char cbuf[size + sizeof (struct GNUNET_CADET_LocalData)];
if (size < sizeof (struct GNUNET_MessageHeader))
GNUNET_memcpy (©[1], &msg[1], size);
copy->header.size = htons (sizeof (struct GNUNET_CADET_LocalData) + size);
copy->header.type = htons (GNUNET_MESSAGE_TYPE_CADET_LOCAL_DATA);
- copy->id = htonl (id);
+ copy->ccn = ccn;
GNUNET_SERVER_notification_context_unicast (nc, c->handle,
©->header, GNUNET_NO);
}