/**
* The message
*/
- struct GNUNET_STREAM_MessageHeader *message;
+ struct GNUNET_MessageHeader *message;
/**
* Callback to be called when the message is sent
/**
* The application port number (type: uint32_t)
*/
- GNUNET_MESH_ApplicationType app_port;
+ GNUNET_MESH_ApplicationType port;
/**
* The write sequence number to be set incase of testing
GNUNET_NO, /* Corking */
socket->mesh_retry_timeout,
&socket->other_peer,
- ntohs (head->message->header.size),
+ ntohs (head->message->size),
&send_message_notify,
socket);
return 0;
}
- ret = ntohs (head->message->header.size);
+ ret = ntohs (head->message->size);
GNUNET_assert (size >= ret);
memcpy (buf, head->message, ret);
if (NULL != head->finish_cb)
GNUNET_NO, /* Corking */
socket->mesh_retry_timeout,
&socket->other_peer,
- ntohs (head->message->header.size),
+ ntohs (head->message->size),
&send_message_notify,
socket);
}
*/
static void
queue_message (struct GNUNET_STREAM_Socket *socket,
- struct GNUNET_STREAM_MessageHeader *message,
+ struct GNUNET_MessageHeader *message,
SendFinishCallback finish_cb,
void *finish_cb_cls,
int urgent)
{
struct MessageQueue *queue_entity;
- GNUNET_assert
- ((ntohs (message->header.type) >= GNUNET_MESSAGE_TYPE_STREAM_DATA)
- && (ntohs (message->header.type) <= GNUNET_MESSAGE_TYPE_STREAM_CLOSE_ACK));
- LOG (GNUNET_ERROR_TYPE_DEBUG,
- "%s: Queueing message of type %d and size %d\n",
+ GNUNET_assert ((ntohs (message->type) >= GNUNET_MESSAGE_TYPE_STREAM_DATA)
+ && (ntohs (message->type)
+ <= GNUNET_MESSAGE_TYPE_STREAM_CLOSE_ACK));
+ LOG (GNUNET_ERROR_TYPE_DEBUG, "%s: Queueing message of type %d and size %d\n",
GNUNET_i2s (&socket->other_peer),
- ntohs (message->header.type),
- ntohs (message->header.size));
+ ntohs (message->type),ntohs (message->size));
GNUNET_assert (NULL != message);
queue_entity = GNUNET_malloc (sizeof (struct MessageQueue));
queue_entity->message = message;
GNUNET_NO, /* Corking */
socket->mesh_retry_timeout,
&socket->other_peer,
- ntohs (message->header.size),
+ ntohs (message->size),
&send_message_notify,
socket);
}
*/
static void
copy_and_queue_message (struct GNUNET_STREAM_Socket *socket,
- const struct GNUNET_STREAM_MessageHeader *message,
+ const struct GNUNET_MessageHeader *message,
SendFinishCallback finish_cb,
void *finish_cb_cls)
{
- struct GNUNET_STREAM_MessageHeader *msg_copy;
+ struct GNUNET_MessageHeader *msg_copy;
uint16_t size;
- size = ntohs (message->header.size);
+ size = ntohs (message->size);
msg_copy = GNUNET_malloc (size);
memcpy (msg_copy, message, size);
queue_message (socket, msg_copy, finish_cb, finish_cb_cls, GNUNET_NO);
return;
/* Create the ACK Message */
ack_msg = GNUNET_malloc (sizeof (struct GNUNET_STREAM_AckMessage));
- ack_msg->header.header.size = htons (sizeof (struct
+ ack_msg->header.size = htons (sizeof (struct
GNUNET_STREAM_AckMessage));
- ack_msg->header.header.type = htons (GNUNET_MESSAGE_TYPE_STREAM_ACK);
+ ack_msg->header.type = htons (GNUNET_MESSAGE_TYPE_STREAM_ACK);
ack_msg->bitmap = GNUNET_htonll (socket->ack_bitmap);
ack_msg->base_sequence_number = htonl (socket->read_sequence_number);
ack_msg->receive_window_remaining =
const struct GNUNET_SCHEDULER_TaskContext *tc)
{
struct GNUNET_STREAM_ShutdownHandle *shutdown_handle = cls;
- struct GNUNET_STREAM_MessageHeader *msg;
+ struct GNUNET_MessageHeader *msg;
struct GNUNET_STREAM_Socket *socket;
shutdown_handle->close_msg_retransmission_task_id = GNUNET_SCHEDULER_NO_TASK;
if (0 != (GNUNET_SCHEDULER_REASON_SHUTDOWN & tc->reason))
return;
socket = shutdown_handle->socket;
- msg = GNUNET_malloc (sizeof (struct GNUNET_STREAM_MessageHeader));
- msg->header.size = htons (sizeof (struct GNUNET_STREAM_MessageHeader));
+ msg = GNUNET_malloc (sizeof (struct GNUNET_MessageHeader));
+ msg->size = htons (sizeof (struct GNUNET_MessageHeader));
switch (shutdown_handle->operation)
{
case SHUT_RDWR:
- msg->header.type = htons (GNUNET_MESSAGE_TYPE_STREAM_CLOSE);
+ msg->type = htons (GNUNET_MESSAGE_TYPE_STREAM_CLOSE);
break;
case SHUT_RD:
- msg->header.type = htons (GNUNET_MESSAGE_TYPE_STREAM_RECEIVE_CLOSE);
+ msg->type = htons (GNUNET_MESSAGE_TYPE_STREAM_RECEIVE_CLOSE);
break;
case SHUT_WR:
- msg->header.type = htons (GNUNET_MESSAGE_TYPE_STREAM_TRANSMIT_CLOSE);
+ msg->type = htons (GNUNET_MESSAGE_TYPE_STREAM_TRANSMIT_CLOSE);
break;
default:
GNUNET_free (msg);
while ((packet < GNUNET_STREAM_ACK_BITMAP_BIT_LENGTH) &&
(NULL != io_handle->messages[packet]) &&
(socket->receiver_window_available
- >= ntohs (io_handle->messages[packet]->header.header.size)))
+ >= ntohs (io_handle->messages[packet]->header.size)))
{
socket->receiver_window_available -=
- ntohs (io_handle->messages[packet]->header.header.size);
+ ntohs (io_handle->messages[packet]->header.size);
LOG (GNUNET_ERROR_TYPE_DEBUG,
"%s: Placing DATA message with sequence %u in send queue\n",
GNUNET_i2s (&socket->other_peer),
uint32_t relative_sequence_number;
uint16_t size;
- size = htons (msg->header.header.size);
+ size = htons (msg->header.size);
if (size < sizeof (struct GNUNET_STREAM_DataMessage))
{
GNUNET_break_op (0);
return GNUNET_YES;
}
LOG (GNUNET_ERROR_TYPE_DEBUG,
- "%s: Receiving DATA with sequence number: %u and size: %d from %s\n",
- GNUNET_i2s (&socket->other_peer), ntohl (msg->sequence_number),
- ntohs (msg->header.header.size), GNUNET_i2s (&socket->other_peer));
+ "%1$s: Receiving DATA with sequence number: %2$u and size: %3$d from "
+ "%1$s\n", GNUNET_i2s (&socket->other_peer),
+ ntohl (msg->sequence_number), ntohs (msg->header.size));
/* Check if we have to allocate the buffer */
size -= sizeof (struct GNUNET_STREAM_DataMessage);
relative_offset = ntohl (msg->offset) - socket->read_offset;
*
* @return the generate hello message
*/
-static struct GNUNET_STREAM_MessageHeader *
-generate_hello (void)
+static struct GNUNET_MessageHeader *
+generate_hello (struct GNUNET_STREAM_Socket *socket)
{
- struct GNUNET_STREAM_MessageHeader *msg;
+ struct GNUNET_STREAM_HelloMessage *msg;
- msg = GNUNET_malloc (sizeof (struct GNUNET_STREAM_MessageHeader));
+ msg = GNUNET_malloc (sizeof (struct GNUNET_STREAM_HelloMessage));
msg->header.type = htons (GNUNET_MESSAGE_TYPE_STREAM_HELLO);
- msg->header.size = htons (sizeof (struct GNUNET_STREAM_MessageHeader));
- return msg;
+ msg->header.size = htons (sizeof (struct GNUNET_STREAM_HelloMessage));
+ msg->port = GNUNET_htonll ((uint64_t) socket->port);
+ return &msg->header;
}
(unsigned int) socket->write_sequence_number);
}
msg = GNUNET_malloc (sizeof (struct GNUNET_STREAM_HelloAckMessage));
- msg->header.header.size =
+ msg->header.size =
htons (sizeof (struct GNUNET_STREAM_HelloAckMessage));
- msg->header.header.type = htons (GNUNET_MESSAGE_TYPE_STREAM_HELLO_ACK);
+ msg->header.type = htons (GNUNET_MESSAGE_TYPE_STREAM_HELLO_ACK);
msg->sequence_number = htonl (socket->write_sequence_number);
msg->receiver_window_size = htonl (RECEIVE_BUFFER_SIZE);
return msg;
break;
case STATE_HELLO_WAIT:
if (NULL == socket->lsocket) /* We are client */
- queue_message (socket, generate_hello (), NULL, NULL, GNUNET_NO);
+ queue_message (socket, generate_hello (socket), NULL, NULL, GNUNET_NO);
else
queue_message (socket,
- (struct GNUNET_STREAM_MessageHeader *)
+ (struct GNUNET_MessageHeader *)
generate_hello_ack (socket, GNUNET_NO), NULL, NULL,
GNUNET_NO);
socket->control_retransmission_task_id =
case STATE_ESTABLISHED:
if (NULL == socket->lsocket)
queue_message (socket,
- (struct GNUNET_STREAM_MessageHeader *)
+ (struct GNUNET_MessageHeader *)
generate_hello_ack (socket, GNUNET_NO), NULL, NULL,
GNUNET_NO);
else
handle_transmit_close (struct GNUNET_STREAM_Socket *socket,
struct GNUNET_MESH_Tunnel *tunnel,
const struct GNUNET_PeerIdentity *sender,
- const struct GNUNET_STREAM_MessageHeader *msg,
+ const struct GNUNET_MessageHeader *msg,
const struct GNUNET_ATS_Information*atsi)
{
- struct GNUNET_STREAM_MessageHeader *reply;
+ struct GNUNET_MessageHeader *reply;
switch (socket->state)
{
break;
}
/* Send TRANSMIT_CLOSE_ACK */
- reply = GNUNET_malloc (sizeof (struct GNUNET_STREAM_MessageHeader));
- reply->header.type =
- htons (GNUNET_MESSAGE_TYPE_STREAM_TRANSMIT_CLOSE_ACK);
- reply->header.size = htons (sizeof (struct GNUNET_STREAM_MessageHeader));
+ reply = GNUNET_malloc (sizeof (struct GNUNET_MessageHeader));
+ reply->type = htons (GNUNET_MESSAGE_TYPE_STREAM_TRANSMIT_CLOSE_ACK);
+ reply->size = htons (sizeof (struct GNUNET_MessageHeader));
queue_message (socket, reply, NULL, NULL, GNUNET_NO);
- LOG (GNUNET_ERROR_TYPE_DEBUG, "%s: Received TRANSMIT_CLOSE from %s\n",
- GNUNET_i2s (&socket->other_peer), GNUNET_i2s (&socket->other_peer));
+ LOG (GNUNET_ERROR_TYPE_DEBUG, "%1$s: Received TRANSMIT_CLOSE from %1$s\n",
+ GNUNET_i2s (&socket->other_peer));
switch(socket->state)
{
case STATE_RECEIVE_CLOSED:
return handle_transmit_close (socket,
tunnel,
sender,
- (struct GNUNET_STREAM_MessageHeader *)message,
+ (struct GNUNET_MessageHeader *)message,
atsi);
}
handle_generic_close_ack (struct GNUNET_STREAM_Socket *socket,
struct GNUNET_MESH_Tunnel *tunnel,
const struct GNUNET_PeerIdentity *sender,
- const struct GNUNET_STREAM_MessageHeader *message,
+ const struct GNUNET_MessageHeader *message,
const struct GNUNET_ATS_Information *atsi,
int operation)
{
return handle_generic_close_ack (socket,
tunnel,
sender,
- (const struct GNUNET_STREAM_MessageHeader *)
+ (const struct GNUNET_MessageHeader *)
message,
atsi,
SHUT_WR);
handle_receive_close (struct GNUNET_STREAM_Socket *socket,
struct GNUNET_MESH_Tunnel *tunnel,
const struct GNUNET_PeerIdentity *sender,
- const struct GNUNET_STREAM_MessageHeader *message,
+ const struct GNUNET_MessageHeader *message,
const struct GNUNET_ATS_Information *atsi)
{
- struct GNUNET_STREAM_MessageHeader *receive_close_ack;
+ struct GNUNET_MessageHeader *receive_close_ack;
switch (socket->state)
{
}
LOG (GNUNET_ERROR_TYPE_DEBUG, "%s: Received RECEIVE_CLOSE from %s\n",
GNUNET_i2s (&socket->other_peer), GNUNET_i2s (&socket->other_peer));
- receive_close_ack =
- GNUNET_malloc (sizeof (struct GNUNET_STREAM_MessageHeader));
- receive_close_ack->header.size =
- htons (sizeof (struct GNUNET_STREAM_MessageHeader));
- receive_close_ack->header.type =
- htons (GNUNET_MESSAGE_TYPE_STREAM_RECEIVE_CLOSE_ACK);
+ receive_close_ack = GNUNET_malloc (sizeof (struct GNUNET_MessageHeader));
+ receive_close_ack->size = htons (sizeof (struct GNUNET_MessageHeader));
+ receive_close_ack->type =
+ htons (GNUNET_MESSAGE_TYPE_STREAM_RECEIVE_CLOSE_ACK);
queue_message (socket, receive_close_ack, NULL, NULL, GNUNET_NO);
switch (socket->state)
{
handle_receive_close (socket,
tunnel,
sender,
- (const struct GNUNET_STREAM_MessageHeader *) message,
+ (const struct GNUNET_MessageHeader *) message,
atsi);
}
return handle_generic_close_ack (socket,
tunnel,
sender,
- (const struct GNUNET_STREAM_MessageHeader *)
+ (const struct GNUNET_MessageHeader *)
message,
atsi,
SHUT_RD);
handle_close (struct GNUNET_STREAM_Socket *socket,
struct GNUNET_MESH_Tunnel *tunnel,
const struct GNUNET_PeerIdentity *sender,
- const struct GNUNET_STREAM_MessageHeader *message,
+ const struct GNUNET_MessageHeader *message,
const struct GNUNET_ATS_Information*atsi)
{
- struct GNUNET_STREAM_MessageHeader *close_ack;
+ struct GNUNET_MessageHeader *close_ack;
switch (socket->state)
{
}
LOG (GNUNET_ERROR_TYPE_DEBUG, "%s: Received CLOSE from %s\n",
GNUNET_i2s (&socket->other_peer), GNUNET_i2s (&socket->other_peer));
- close_ack = GNUNET_malloc (sizeof (struct GNUNET_STREAM_MessageHeader));
- close_ack->header.size = htons (sizeof (struct GNUNET_STREAM_MessageHeader));
- close_ack->header.type = htons (GNUNET_MESSAGE_TYPE_STREAM_CLOSE_ACK);
+ close_ack = GNUNET_malloc (sizeof (struct GNUNET_MessageHeader));
+ close_ack->size = htons (sizeof (struct GNUNET_MessageHeader));
+ close_ack->type = htons (GNUNET_MESSAGE_TYPE_STREAM_CLOSE_ACK);
queue_message (socket, close_ack, &set_state_closed, NULL, GNUNET_NO);
if ((STATE_CLOSED == socket->state) || (STATE_CLOSE_WAIT == socket->state))
return GNUNET_OK;
return handle_close (socket,
tunnel,
sender,
- (const struct GNUNET_STREAM_MessageHeader *) message,
+ (const struct GNUNET_MessageHeader *) message,
atsi);
}
return handle_generic_close_ack (socket,
tunnel,
sender,
- (const struct GNUNET_STREAM_MessageHeader *)
+ (const struct GNUNET_MessageHeader *)
message,
atsi,
SHUT_RDWR);
const struct GNUNET_ATS_Information*atsi)
{
struct GNUNET_STREAM_Socket *socket = *tunnel_ctx;
+ const struct GNUNET_STREAM_HelloMessage *hello;
struct GNUNET_STREAM_HelloAckMessage *reply;
+ uint32_t port;
+ hello = (const struct GNUNET_STREAM_HelloMessage *) message;
if (0 != memcmp (sender,
&socket->other_peer,
sizeof (struct GNUNET_PeerIdentity)))
}
GNUNET_assert (GNUNET_MESSAGE_TYPE_STREAM_HELLO == ntohs (message->type));
GNUNET_assert (socket->tunnel == tunnel);
- LOG_DEBUG ("%s: Received HELLO from %s\n", GNUNET_i2s (&socket->other_peer),
+ LOG_DEBUG ("%1$s: Received HELLO from %1$s\n",
GNUNET_i2s (&socket->other_peer));
+ port = (uint32_t) GNUNET_ntohll (hello->port);
switch (socket->state)
{
case STATE_INIT:
+ if (port != socket->port)
+ {
+ LOG_DEBUG ("Ignoring HELLO for port %u\n", port);
+ GNUNET_MESH_tunnel_destroy (tunnel);
+ GNUNET_free (socket);
+ return GNUNET_OK;
+ }
reply = generate_hello_ack (socket, GNUNET_YES);
queue_message (socket, &reply->header, &set_state_hello_wait, NULL,
GNUNET_NO);
const struct GNUNET_ATS_Information*atsi)
{
// struct GNUNET_STREAM_Socket *socket = *tunnel_ctx;
-
+ /* FIXME */
return GNUNET_OK;
}
{
struct GNUNET_STREAM_Socket *socket = *tunnel_ctx;
- return handle_transmit_close (socket,
- tunnel,
- sender,
- (struct GNUNET_STREAM_MessageHeader *)message,
- atsi);
+ return handle_transmit_close (socket, tunnel, sender, message, atsi);
}
{
struct GNUNET_STREAM_Socket *socket = *tunnel_ctx;
- return handle_generic_close_ack (socket,
- tunnel,
- sender,
- (const struct GNUNET_STREAM_MessageHeader *)
- message,
- atsi,
+ return handle_generic_close_ack (socket, tunnel, sender, message, atsi,
SHUT_WR);
}
{
struct GNUNET_STREAM_Socket *socket = *tunnel_ctx;
- return
- handle_receive_close (socket,
- tunnel,
- sender,
- (const struct GNUNET_STREAM_MessageHeader *) message,
- atsi);
+ return handle_receive_close (socket, tunnel, sender, message, atsi);
}
{
struct GNUNET_STREAM_Socket *socket = *tunnel_ctx;
- return handle_generic_close_ack (socket,
- tunnel,
- sender,
- (const struct GNUNET_STREAM_MessageHeader *)
- message,
- atsi,
+ return handle_generic_close_ack (socket, tunnel, sender, message, atsi,
SHUT_RD);
}
{
struct GNUNET_STREAM_Socket *socket = *tunnel_ctx;
- return handle_close (socket,
- tunnel,
- sender,
- (const struct GNUNET_STREAM_MessageHeader *) message,
- atsi);
+ return handle_close (socket, tunnel, sender, message, atsi);
}
{
struct GNUNET_STREAM_Socket *socket = *tunnel_ctx;
- return handle_generic_close_ack (socket,
- tunnel,
- sender,
- (const struct GNUNET_STREAM_MessageHeader *)
- message,
- atsi,
+ return handle_generic_close_ack (socket, tunnel, sender, message, atsi,
SHUT_RDWR);
}
const struct GNUNET_ATS_Information*atsi)
{
struct GNUNET_STREAM_Socket *socket = cls;
- const struct GNUNET_STREAM_AckMessage *ack = (const struct GNUNET_STREAM_AckMessage *) message;
-
+ const struct GNUNET_STREAM_AckMessage *ack;
+
+ ack = (const struct GNUNET_STREAM_AckMessage *) message;
return handle_ack (socket, tunnel, sender, ack, atsi);
}
{&client_handle_hello_ack, GNUNET_MESSAGE_TYPE_STREAM_HELLO_ACK,
sizeof (struct GNUNET_STREAM_HelloAckMessage)},
{&client_handle_reset, GNUNET_MESSAGE_TYPE_STREAM_RESET,
- sizeof (struct GNUNET_STREAM_MessageHeader)},
+ sizeof (struct GNUNET_MessageHeader)},
{&client_handle_transmit_close, GNUNET_MESSAGE_TYPE_STREAM_TRANSMIT_CLOSE,
- sizeof (struct GNUNET_STREAM_MessageHeader)},
+ sizeof (struct GNUNET_MessageHeader)},
{&client_handle_transmit_close_ack, GNUNET_MESSAGE_TYPE_STREAM_TRANSMIT_CLOSE_ACK,
- sizeof (struct GNUNET_STREAM_MessageHeader)},
+ sizeof (struct GNUNET_MessageHeader)},
{&client_handle_receive_close, GNUNET_MESSAGE_TYPE_STREAM_RECEIVE_CLOSE,
- sizeof (struct GNUNET_STREAM_MessageHeader)},
+ sizeof (struct GNUNET_MessageHeader)},
{&client_handle_receive_close_ack, GNUNET_MESSAGE_TYPE_STREAM_RECEIVE_CLOSE_ACK,
- sizeof (struct GNUNET_STREAM_MessageHeader)},
+ sizeof (struct GNUNET_MessageHeader)},
{&client_handle_close, GNUNET_MESSAGE_TYPE_STREAM_CLOSE,
- sizeof (struct GNUNET_STREAM_MessageHeader)},
+ sizeof (struct GNUNET_MessageHeader)},
{&client_handle_close_ack, GNUNET_MESSAGE_TYPE_STREAM_CLOSE_ACK,
- sizeof (struct GNUNET_STREAM_MessageHeader)},
+ sizeof (struct GNUNET_MessageHeader)},
{NULL, 0, 0}
};
{&server_handle_ack, GNUNET_MESSAGE_TYPE_STREAM_ACK,
sizeof (struct GNUNET_STREAM_AckMessage) },
{&server_handle_hello, GNUNET_MESSAGE_TYPE_STREAM_HELLO,
- sizeof (struct GNUNET_STREAM_MessageHeader)},
+ sizeof (struct GNUNET_STREAM_HelloMessage)},
{&server_handle_hello_ack, GNUNET_MESSAGE_TYPE_STREAM_HELLO_ACK,
sizeof (struct GNUNET_STREAM_HelloAckMessage)},
{&server_handle_reset, GNUNET_MESSAGE_TYPE_STREAM_RESET,
- sizeof (struct GNUNET_STREAM_MessageHeader)},
+ sizeof (struct GNUNET_MessageHeader)},
{&server_handle_transmit_close, GNUNET_MESSAGE_TYPE_STREAM_TRANSMIT_CLOSE,
- sizeof (struct GNUNET_STREAM_MessageHeader)},
+ sizeof (struct GNUNET_MessageHeader)},
{&server_handle_transmit_close_ack, GNUNET_MESSAGE_TYPE_STREAM_TRANSMIT_CLOSE_ACK,
- sizeof (struct GNUNET_STREAM_MessageHeader)},
+ sizeof (struct GNUNET_MessageHeader)},
{&server_handle_receive_close, GNUNET_MESSAGE_TYPE_STREAM_RECEIVE_CLOSE,
- sizeof (struct GNUNET_STREAM_MessageHeader)},
+ sizeof (struct GNUNET_MessageHeader)},
{&server_handle_receive_close_ack, GNUNET_MESSAGE_TYPE_STREAM_RECEIVE_CLOSE_ACK,
- sizeof (struct GNUNET_STREAM_MessageHeader)},
+ sizeof (struct GNUNET_MessageHeader)},
{&server_handle_close, GNUNET_MESSAGE_TYPE_STREAM_CLOSE,
- sizeof (struct GNUNET_STREAM_MessageHeader)},
+ sizeof (struct GNUNET_MessageHeader)},
{&server_handle_close_ack, GNUNET_MESSAGE_TYPE_STREAM_CLOSE_ACK,
- sizeof (struct GNUNET_STREAM_MessageHeader)},
+ sizeof (struct GNUNET_MessageHeader)},
{NULL, 0, 0}
};
const struct GNUNET_ATS_Information * atsi)
{
struct GNUNET_STREAM_Socket *socket = cls;
- struct GNUNET_STREAM_MessageHeader *message;
+ struct GNUNET_MessageHeader *message;
if (0 != memcmp (peer,
&socket->other_peer,
/* Set state to INIT */
socket->state = STATE_INIT;
/* Send HELLO message */
- message = generate_hello ();
+ message = generate_hello (socket);
queue_message (socket, message, &set_state_hello_wait, NULL, GNUNET_NO);
- GNUNET_assert (GNUNET_SCHEDULER_NO_TASK ==
- socket->control_retransmission_task_id);
+ if (GNUNET_SCHEDULER_NO_TASK != socket->control_retransmission_task_id)
+ GNUNET_SCHEDULER_cancel (socket->control_retransmission_task_id);
socket->control_retransmission_task_id =
GNUNET_SCHEDULER_add_delayed (socket->retransmit_timeout,
&control_retransmission_task, socket);
struct GNUNET_STREAM_Socket *socket=cls;
/* If the state is SHUTDOWN its ok; else set the state of the socket to SYSERR */
- LOG (GNUNET_ERROR_TYPE_DEBUG,
- "%s: Other peer %s disconnected \n",
- GNUNET_i2s (&socket->other_peer),
- GNUNET_i2s (&socket->other_peer));
+ LOG_DEBUG ("%1$s: Other peer %1$s disconnected \n",
+ GNUNET_i2s (&socket->other_peer));
}
/* FIXME: If a tunnel is already created, we should not accept new tunnels
from the same peer again until the socket is closed */
-
if (GNUNET_NO == lsocket->listening)
{
GNUNET_MESH_tunnel_destroy (tunnel);
socket->tunnel = tunnel;
socket->state = STATE_INIT;
socket->lsocket = lsocket;
+ socket->port = lsocket->port;
socket->stat_handle = lsocket->stat_handle;
socket->retransmit_timeout = lsocket->retransmit_timeout;
socket->testing_active = lsocket->testing_active;
socket->testing_set_write_sequence_number_value =
lsocket->testing_set_write_sequence_number_value;
socket->max_payload_size = lsocket->max_payload_size;
- LOG (GNUNET_ERROR_TYPE_DEBUG,
- "%s: Peer %s initiated tunnel to us\n",
- GNUNET_i2s (&socket->other_peer),
- GNUNET_i2s (&socket->other_peer));
+ LOG_DEBUG ("%1$s: Peer %1$s initiated tunnel to us\n",
+ GNUNET_i2s (&socket->other_peer));
if (NULL != socket->stat_handle)
{
GNUNET_STATISTICS_update (socket->stat_handle,
GNUNET_STATISTICS_update (socket->stat_handle,
"inbound connections", 1, GNUNET_NO);
}
-
return socket;
}
{
struct GNUNET_STREAM_Socket *socket;
enum GNUNET_STREAM_Option option;
- GNUNET_MESH_ApplicationType ports[] = {app_port, 0};
va_list vargs;
uint16_t payload_size;
socket->other_peer = *target;
socket->open_cb = open_cb;
socket->open_cls = open_cb_cls;
+ socket->port = app_port;
/* Set defaults */
socket->retransmit_timeout = TIME_REL_SECS (default_timeout);
socket->testing_active = GNUNET_NO;
NULL, /* No inbound tunnel handler */
NULL, /* No in-tunnel cleaner */
client_message_handlers,
- ports); /* We don't get inbound tunnels */
+ NULL); /* We don't get inbound tunnels */
if (NULL == socket->mesh) /* Fail if we cannot connect to mesh */
{
GNUNET_free (socket);
void *completion_cls)
{
struct GNUNET_STREAM_ShutdownHandle *handle;
- struct GNUNET_STREAM_MessageHeader *msg;
+ struct GNUNET_MessageHeader *msg;
GNUNET_assert (NULL == socket->shutdown_handle);
handle = GNUNET_malloc (sizeof (struct GNUNET_STREAM_ShutdownHandle));
socket);
return handle;
}
- msg = GNUNET_malloc (sizeof (struct GNUNET_STREAM_MessageHeader));
- msg->header.size = htons (sizeof (struct GNUNET_STREAM_MessageHeader));
+ msg = GNUNET_malloc (sizeof (struct GNUNET_MessageHeader));
+ msg->size = htons (sizeof (struct GNUNET_MessageHeader));
switch (operation)
{
case SHUT_RD:
LOG (GNUNET_ERROR_TYPE_WARNING,
"Existing read handle should be cancelled before shutting"
" down reading\n");
- msg->header.type = htons (GNUNET_MESSAGE_TYPE_STREAM_RECEIVE_CLOSE);
+ msg->type = htons (GNUNET_MESSAGE_TYPE_STREAM_RECEIVE_CLOSE);
queue_message (socket, msg, &set_state_receive_close_wait, NULL,
GNUNET_NO);
socket->receive_closed = GNUNET_YES;
LOG (GNUNET_ERROR_TYPE_WARNING,
"Existing write handle should be cancelled before shutting"
" down writing\n");
- msg->header.type = htons (GNUNET_MESSAGE_TYPE_STREAM_TRANSMIT_CLOSE);
+ msg->type = htons (GNUNET_MESSAGE_TYPE_STREAM_TRANSMIT_CLOSE);
queue_message (socket, msg, &set_state_transmit_close_wait, NULL,
GNUNET_NO);
socket->transmit_closed = GNUNET_YES;
LOG (GNUNET_ERROR_TYPE_WARNING,
"Existing read handle should be cancelled before shutting"
" down reading\n");
- msg->header.type = htons (GNUNET_MESSAGE_TYPE_STREAM_CLOSE);
+ msg->type = htons (GNUNET_MESSAGE_TYPE_STREAM_CLOSE);
queue_message (socket, msg, &set_state_close_wait, NULL, GNUNET_NO);
socket->transmit_closed = GNUNET_YES;
socket->receive_closed = GNUNET_YES;
void *write_cont_cls)
{
struct GNUNET_STREAM_WriteHandle *io_handle;
- struct GNUNET_STREAM_DataMessage *data_msg;
+ struct GNUNET_STREAM_DataMessage *dmsg;
const void *sweep;
struct GNUNET_TIME_Relative ack_deadline;
unsigned int num_needed_packets;
- unsigned int packet;
+ unsigned int cnt;
uint32_t packet_size;
uint32_t payload_size;
uint16_t max_data_packet_size;
max_data_packet_size =
socket->max_payload_size + sizeof (struct GNUNET_STREAM_DataMessage);
io_handle->max_ack_base_num = socket->write_sequence_number;
- for (packet=0; packet < num_needed_packets; packet++)
+ for (cnt=0; cnt < num_needed_packets; cnt++)
{
- if ((packet + 1) * socket->max_payload_size < size)
+ if ((cnt + 1) * socket->max_payload_size < size)
{
payload_size = socket->max_payload_size;
packet_size = max_data_packet_size;
}
else
{
- payload_size = size - packet * socket->max_payload_size;
- packet_size =
- payload_size + sizeof (struct GNUNET_STREAM_DataMessage);
+ payload_size = size - (cnt * socket->max_payload_size);
+ packet_size = payload_size + sizeof (struct GNUNET_STREAM_DataMessage);
}
- io_handle->messages[packet] = GNUNET_malloc (packet_size);
- io_handle->messages[packet]->header.header.size = htons (packet_size);
- io_handle->messages[packet]->header.header.type =
- htons (GNUNET_MESSAGE_TYPE_STREAM_DATA);
- io_handle->messages[packet]->sequence_number =
- htonl (socket->write_sequence_number++);
- io_handle->messages[packet]->offset = htonl (socket->write_offset);
+ dmsg = GNUNET_malloc (packet_size);
+ dmsg->header.size = htons (packet_size);
+ dmsg->header.type = htons (GNUNET_MESSAGE_TYPE_STREAM_DATA);
+ dmsg->sequence_number = htonl (socket->write_sequence_number++);
+ dmsg->offset = htonl (socket->write_offset);
/* FIXME: Remove the fixed delay for ack deadline; Set it to the value
determined from RTT */
- io_handle->messages[packet]->ack_deadline =
- GNUNET_TIME_relative_hton (ack_deadline);
- data_msg = io_handle->messages[packet];
+ dmsg->ack_deadline = GNUNET_TIME_relative_hton (ack_deadline);
/* Copy data from given buffer to the packet */
- memcpy (&data_msg[1], sweep, payload_size);
+ memcpy (&dmsg[1], sweep, payload_size);
+ io_handle->messages[cnt] = dmsg;
sweep += payload_size;
socket->write_offset += payload_size;
}
}
-
/**
* Tries to read data from the stream. Should not be called when another read
* handle is present; the existing read handle should be canceled with