*/
/**
- * @file transport/gnunet_transport_plugin.http.c
+ * @file transport/plugin_transport_http.c
* @brief http transport service plugin
* @author Matthias Wachs
*/
/**
* Function setting up curl handle and selecting message to send
+ *
* @param plugin plugin
- * @param ses session to send data to
- * @param con connection
- * @return bytes sent to peer
+ * @param ps session
+ * @return GNUNET_SYSERR on failure, GNUNET_NO if connecting, GNUNET_YES if ok
*/
static int send_check_connections (struct Plugin *plugin, struct Session *ps);
/**
* Function setting up file descriptors and scheduling task to run
- * @param cls closure
- * @param ses session to send data to
- * @param
+ *
+ * @param plugin plugin as closure
+ * @return GNUNET_SYSERR for hard failure, GNUNET_OK for ok
*/
static int curl_schedule (struct Plugin *plugin);
ntohs(message->size),
GNUNET_i2s(&(ps->peercontext)->identity),http_plugin_address_to_string(NULL,ps->addr,ps->addrlen));
#endif
+ struct GNUNET_TRANSPORT_ATS_Information distance[2];
+ distance[0].type = htonl (GNUNET_TRANSPORT_ATS_QUALITY_NET_DISTANCE);
+ distance[0].value = htonl (1);
+ distance[1].type = htonl (GNUNET_TRANSPORT_ATS_ARRAY_TERMINATOR);
+ distance[1].value = htonl (0);
+
delay = pc->plugin->env->receive (ps->peercontext->plugin->env->cls,
&pc->identity,
- message, 1, ps,
+ message,
+ (const struct GNUNET_TRANSPORT_ATS_Information *) &distance,
+ 2,
+ ps,
NULL,
0);
pc->delay = delay;
struct Plugin *plugin = cls;
struct MHD_Response *response;
const union MHD_ConnectionInfo * conn_info;
-
- struct sockaddr_in *addrin;
- struct sockaddr_in6 *addrin6;
+ const struct sockaddr *client_addr;
+ const struct sockaddr_in *addrin;
+ const struct sockaddr_in6 *addrin6;
char address[INET6_ADDRSTRLEN+14];
struct GNUNET_PeerIdentity pi_in;
conn_info = MHD_get_connection_info(mhd_connection, MHD_CONNECTION_INFO_CLIENT_ADDRESS );
/* Incoming IPv4 connection */
- if ( AF_INET == conn_info->client_addr->sin_family)
+ /* cast required for legacy MHD API < 0.9.6 */
+ client_addr = (const struct sockaddr *) conn_info->client_addr;
+ if ( AF_INET == client_addr->sa_family)
{
- addrin = conn_info->client_addr;
+ addrin = (const struct sockaddr_in*) client_addr;
inet_ntop(addrin->sin_family, &(addrin->sin_addr),address,INET_ADDRSTRLEN);
memcpy(&ipv4addr.ipv4_addr,&(addrin->sin_addr),sizeof(struct in_addr));
ipv4addr.u_port = addrin->sin_port;
addr_len = sizeof(struct IPv4HttpAddress);
}
/* Incoming IPv6 connection */
- if ( AF_INET6 == conn_info->client_addr->sin_family)
+ if ( AF_INET6 == client_addr->sa_family)
{
- addrin6 = (struct sockaddr_in6 *) conn_info->client_addr;
+ addrin6 = (const struct sockaddr_in6 *) client_addr;
inet_ntop(addrin6->sin6_family, &(addrin6->sin6_addr),address,INET6_ADDRSTRLEN);
memcpy(&ipv6addr.ipv6_addr,&(addrin6->sin6_addr),sizeof(struct in6_addr));
ipv6addr.u6_port = addrin6->sin6_port;
ntohs(message->size),
GNUNET_i2s(&(pc->identity)),http_plugin_address_to_string(NULL,ps->addr,ps->addrlen));
#endif
+ struct GNUNET_TRANSPORT_ATS_Information distance[2];
+ distance[0].type = htonl (GNUNET_TRANSPORT_ATS_QUALITY_NET_DISTANCE);
+ distance[0].value = htonl (1);
+ distance[1].type = htonl (GNUNET_TRANSPORT_ATS_ARRAY_TERMINATOR);
+ distance[1].value = htonl (0);
+
delay = pc->plugin->env->receive (pc->plugin->env->cls,
&pc->identity,
- message, 1, ps,
+ message,
+ (const struct GNUNET_TRANSPORT_ATS_Information *) &distance, 2,
+ ps,
ps->addr,
ps->addrlen);
/**
* Function setting up file descriptors and scheduling task to run
*
- * @param plugin plugin as closure
+ * @param plugin plugin as closure
* @return GNUNET_SYSERR for hard failure, GNUNET_OK for ok
*/
static int curl_schedule(struct Plugin *plugin)
//return GNUNET_SYSERR;
}
- /* create msg */
- msg = GNUNET_malloc (sizeof (struct HTTP_Message) + msgbuf_size);
- msg->next = NULL;
- msg->size = msgbuf_size;
- msg->pos = 0;
- msg->buf = (char *) &msg[1];
- msg->transmit_cont = cont;
- msg->transmit_cont_cls = cont_cls;
- memcpy (msg->buf,msgbuf, msgbuf_size);
-
- GNUNET_CONTAINER_DLL_insert(ps->pending_msgs_head,ps->pending_msgs_tail,msg);
- ps->queue_length_cur += msgbuf_size;
-
- if (send_check_connections (plugin, ps) == GNUNET_SYSERR)
- return GNUNET_SYSERR;
- if (force_address != GNUNET_YES)
- pc->last_session = ps;
-
- if (pc->last_session==NULL)
- pc->last_session = ps;
- return msg->size;
+ /* create msg */
+ msg = GNUNET_malloc (sizeof (struct HTTP_Message) + msgbuf_size);
+ msg->next = NULL;
+ msg->size = msgbuf_size;
+ msg->pos = 0;
+ msg->buf = (char *) &msg[1];
+ msg->transmit_cont = cont;
+ msg->transmit_cont_cls = cont_cls;
+ memcpy (msg->buf,msgbuf, msgbuf_size);
+ GNUNET_CONTAINER_DLL_insert (ps->pending_msgs_head,
+ ps->pending_msgs_tail,
+ msg);
+ ps->queue_length_cur += msgbuf_size;
+ if (send_check_connections (plugin, ps) == GNUNET_SYSERR)
+ return GNUNET_SYSERR;
+ if (force_address != GNUNET_YES)
+ pc->last_session = ps;
+
+ if (pc->last_session==NULL)
+ pc->last_session = ps;
+ return msg->size;
}