[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r11536 - gnunet/src/transport
From: |
gnunet |
Subject: |
[GNUnet-SVN] r11536 - gnunet/src/transport |
Date: |
Thu, 27 May 2010 15:31:42 +0200 |
Author: wachs
Date: 2010-05-27 15:31:42 +0200 (Thu, 27 May 2010)
New Revision: 11536
Modified:
gnunet/src/transport/plugin_transport_http.c
Log:
Modified: gnunet/src/transport/plugin_transport_http.c
===================================================================
--- gnunet/src/transport/plugin_transport_http.c 2010-05-27 12:15:12 UTC
(rev 11535)
+++ gnunet/src/transport/plugin_transport_http.c 2010-05-27 13:31:42 UTC
(rev 11536)
@@ -69,7 +69,15 @@
*/
struct Plugin;
+struct CBC
+{
+ char *buf;
+ size_t pos;
+ size_t size;
+ size_t len;
+};
+
/**
* Session handle for connections.
*/
@@ -155,6 +163,10 @@
* Encoded hash
*/
struct GNUNET_CRYPTO_HashAsciiEncoded hash;
+
+ struct CBC cbc;
+
+ CURL *curl_handle;
};
/**
@@ -182,7 +194,6 @@
*/
unsigned int session_count;
-
};
/**
@@ -233,6 +244,9 @@
*/
static struct GNUNET_CRYPTO_HashAsciiEncoded my_ascii_hash_ident;
+static char buf[2048];
+static char test[2048] = "HEEEELLLO";
+
/**
* Message-Packet header.
*/
@@ -250,15 +264,6 @@
};
-struct CBC
-{
- char *buf;
- size_t pos;
- size_t size;
- size_t len;
-};
-
-
/**
* Finds a http session in our linked list using peer identity as a key
* @param peer peeridentity
@@ -347,6 +352,7 @@
const struct sockaddr *addr, socklen_t addr_len)
{
/* Every connection is accepted, nothing more to do here */
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Connect!\n");
return MHD_YES;
}
@@ -379,9 +385,10 @@
int res = GNUNET_NO;
size_t bytes_recv;
struct GNUNET_MessageHeader *gn_msg;
+ int send_error_to_client;
gn_msg = NULL;
-
+ send_error_to_client = GNUNET_NO;
if ( NULL == *httpSessionCache)
{
/* check url for peer identity */
@@ -494,13 +501,13 @@
if (bytes_recv < sizeof (struct GNUNET_MessageHeader))
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Message too small, is %u bytes,
has to be at least %u '\n",bytes_recv, sizeof(struct GNUNET_MessageHeader));
- return MHD_NO;
+ send_error_to_client = GNUNET_YES;
}
if ( bytes_recv > GNUNET_SERVER_MAX_MESSAGE_SIZE)
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Message too big, is %u bytes,
maximum %u '\n",bytes_recv, GNUNET_SERVER_MAX_MESSAGE_SIZE);
- return MHD_NO;
+ send_error_to_client = GNUNET_YES;
}
struct GNUNET_MessageHeader * gn_msg = GNUNET_malloc (bytes_recv);
@@ -510,8 +517,18 @@
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Message has incorrect size, is %u
bytes vs %u recieved'\n",ntohs(gn_msg->size) , bytes_recv);
GNUNET_free (gn_msg);
+ send_error_to_client = GNUNET_YES;
+ }
+
+ if ( GNUNET_YES == send_error_to_client)
+ {
+ response = MHD_create_response_from_data (strlen
(HTTP_PUT_RESPONSE),HTTP_PUT_RESPONSE, MHD_NO, MHD_NO);
+ res = MHD_queue_response (session, MHD_HTTP_BAD_REQUEST, response);
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Sent HTTP/1.1: 400 BAD REQUEST as
PUT Response\n",HTTP_PUT_RESPONSE, strlen (HTTP_PUT_RESPONSE), res );
+ MHD_destroy_response (response);
return MHD_NO;
}
+
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Recieved GNUnet message type %u
size %u and payload %u \n",ntohs (gn_msg->type), ntohs (gn_msg->size), ntohs
(gn_msg->size)-sizeof(struct GNUNET_MessageHeader));
/* forwarding message to transport */
@@ -630,9 +647,11 @@
return;
}
-static size_t send_read_callback(void *ptr, size_t size, size_t nmemb, void
*stream)
+static size_t send_read_callback(void *stream, size_t size, size_t nmemb, void
*ptr)
{
- struct CBC * cbc = ptr;
+ struct Session * ses = ptr;
+ struct CBC * cbc = &(ses->cbc);
+
if (cbc->len > (size * nmemb))
return CURL_READFUNC_ABORT;
@@ -643,6 +662,7 @@
return cbc->len;
}
+
static size_t send_prepare(struct Session* session );
static void send_execute (void *cls,
@@ -653,6 +673,8 @@
CURLMcode mret;
char * current_url= "test";
+ // GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"send_execute\n");
+
http_task_send = GNUNET_SCHEDULER_NO_TASK;
if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
return;
@@ -661,12 +683,12 @@
{
running = 0;
mret = curl_multi_perform (multi_handle, &running);
+ //GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"send_execute %u\n", running);
if (running == 0)
{
do
{
-
msg = curl_multi_info_read (multi_handle, &running);
GNUNET_break (msg != NULL);
if (msg == NULL)
@@ -699,14 +721,6 @@
}
}
while (mret == CURLM_CALL_MULTI_PERFORM);
-
- if (mret != CURLM_OK)
- {
- GNUNET_log (GNUNET_ERROR_TYPE_INFO,
- _("%s failed at %s:%d: `%s'\n"),
- "curl_multi_perform", __FILE__, __LINE__,
- curl_multi_strerror (mret));
- }
send_prepare(cls);
}
@@ -722,7 +736,7 @@
long to;
CURLMcode mret;
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"send_prepare\n");
+// GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"send_prepare\n");
max = -1;
FD_ZERO (&rs);
FD_ZERO (&ws);
@@ -750,7 +764,6 @@
gws = GNUNET_NETWORK_fdset_create ();
GNUNET_NETWORK_fdset_copy_native (grs, &rs, max + 1);
GNUNET_NETWORK_fdset_copy_native (gws, &ws, max + 1);
- GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"send_prepare\n");
http_task_send = GNUNET_SCHEDULER_add_select (plugin->env->sched,
GNUNET_SCHEDULER_PRIORITY_DEFAULT,
GNUNET_SCHEDULER_NO_TASK,
@@ -810,7 +823,9 @@
struct Session* ses;
struct Session* ses_temp;
int bytes_sent = 0;
- CURL *curl_handle;
+
+ //FILE * hd_src ;
+
CURLMcode mret;
char * url;
@@ -847,31 +862,33 @@
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"New Session `%s' inserted, count %u
\n", GNUNET_i2s(target), plugin->session_count);
}
- curl_handle = curl_easy_init();
- if( NULL == curl_handle)
+ ses->curl_handle = curl_easy_init();
+ if( NULL == ses->curl_handle)
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Getting cURL handle failed\n");
return -1;
}
url = GNUNET_malloc( 7 + strlen(ses->ip) + 7 + strlen ((char *)
&(ses->hash)) + 1);
- GNUNET_asprintf(&url,"http://%s:%u/%s",ses->ip,ses->addr->sin_port, (char *)
&(ses->hash));
+ GNUNET_asprintf(&url,"http://%s:%u/%s",ses->ip,12389, (char *) &(ses->hash));
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"url: %s %u\n",url, 7 + strlen(ses->ip)
+ 7 + strlen ((char *) &(ses->hash)) + 1 );
- curl_easy_setopt(curl_handle, CURLOPT_VERBOSE, 1L);
- curl_easy_setopt(curl_handle, CURLOPT_READFUNCTION, send_read_callback);
- curl_easy_setopt(curl_handle, CURLOPT_UPLOAD, 1L);
- curl_easy_setopt(curl_handle, CURLOPT_PUT, 1L);
- curl_easy_setopt(curl_handle, CURLOPT_URL, addr);
+ (ses->cbc).len = msgbuf_size;
+ (ses->cbc).buf = buf;
+ memcpy(ses->cbc.buf,msgbuf,msgbuf_size);
+
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"msgbuf %s cbc: len %u cbc.buf `%s' test
`%s'\n",msgbuf,ses->cbc.len,ses->cbc.buf,test);
+
+ curl_easy_setopt(ses->curl_handle, CURLOPT_VERBOSE, 1L);
+ curl_easy_setopt(ses->curl_handle, CURLOPT_URL, url);
+ curl_easy_setopt(ses->curl_handle, CURLOPT_PUT, 1L);
+ curl_easy_setopt(ses->curl_handle, CURLOPT_READFUNCTION, send_read_callback);
+ curl_easy_setopt(ses->curl_handle, CURLOPT_READDATA, ses);
+ curl_easy_setopt(ses->curl_handle, CURLOPT_INFILESIZE_LARGE, (curl_off_t)
(ses->cbc).len);
curl_easy_setopt(curl_handle, CURLOPT_TIMEOUT, (timeout.value / 1000 ));
curl_easy_setopt(curl_handle, CURLOPT_CONNECTTIMEOUT, HTTP_CONNECT_TIMEOUT);
- curl_easy_setopt(curl_handle, CURLOPT_READDATA, msgbuf);
- curl_easy_setopt(curl_handle, CURLOPT_INFILESIZE_LARGE,
- (curl_off_t)msgbuf_size);
- GNUNET_free ( url );
-
- mret = curl_multi_add_handle(multi_handle, curl_handle);
+ mret = curl_multi_add_handle(multi_handle, ses->curl_handle);
if (mret != CURLM_OK)
{
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
@@ -880,8 +897,8 @@
curl_multi_strerror (mret));
return -1;
}
-
bytes_sent = send_prepare (ses );
+ GNUNET_free ( url );
return bytes_sent;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r11536 - gnunet/src/transport,
gnunet <=