aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthias Wachs <wachs@net.in.tum.de>2010-06-21 11:39:46 +0000
committerMatthias Wachs <wachs@net.in.tum.de>2010-06-21 11:39:46 +0000
commit36ca30325a5c0f28ba135039c4ef25ad2e9de29f (patch)
tree506ce073bfadcf0b54c86f1ed2006d5974cf3599 /src
parentae8ebff34fd7bb776881b6c99ad70c84d11890e6 (diff)
downloadgnunet-36ca30325a5c0f28ba135039c4ef25ad2e9de29f.tar.gz
gnunet-36ca30325a5c0f28ba135039c4ef25ad2e9de29f.zip
changes to make codesonar and coverity happy
Diffstat (limited to 'src')
-rw-r--r--src/transport/plugin_transport_http.c174
1 files changed, 97 insertions, 77 deletions
diff --git a/src/transport/plugin_transport_http.c b/src/transport/plugin_transport_http.c
index 0106afcce..2bf21e02d 100644
--- a/src/transport/plugin_transport_http.c
+++ b/src/transport/plugin_transport_http.c
@@ -39,7 +39,7 @@
39#include <curl/curl.h> 39#include <curl/curl.h>
40 40
41 41
42#define DEBUG_CURL GNUNET_NO 42#define DEBUG_CURL GNUNET_YES
43#define DEBUG_HTTP GNUNET_NO 43#define DEBUG_HTTP GNUNET_NO
44 44
45/** 45/**
@@ -564,6 +564,7 @@ accessHandlerCallback (void *cls,
564 /* copy uploaded data to buffer */ 564 /* copy uploaded data to buffer */
565 memcpy(&cs->pending_inbound_msg->buf[cs->pending_inbound_msg->pos],upload_data,*upload_data_size); 565 memcpy(&cs->pending_inbound_msg->buf[cs->pending_inbound_msg->pos],upload_data,*upload_data_size);
566 cs->pending_inbound_msg->pos += *upload_data_size; 566 cs->pending_inbound_msg->pos += *upload_data_size;
567 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"%u bytes added to message of %u bytes\n",*upload_data_size, cs->pending_inbound_msg->pos);
567 *upload_data_size = 0; 568 *upload_data_size = 0;
568 return MHD_YES; 569 return MHD_YES;
569 } 570 }
@@ -598,12 +599,17 @@ accessHandlerCallback (void *cls,
598 struct GNUNET_MessageHeader * gn_msg = NULL; 599 struct GNUNET_MessageHeader * gn_msg = NULL;
599 /*check message and forward here */ 600 /*check message and forward here */
600 /* checking size */ 601 /* checking size */
602
601 if (cs->pending_inbound_msg->pos >= sizeof (struct GNUNET_MessageHeader)) 603 if (cs->pending_inbound_msg->pos >= sizeof (struct GNUNET_MessageHeader))
602 { 604 {
605
603 gn_msg = GNUNET_malloc (cs->pending_inbound_msg->pos); 606 gn_msg = GNUNET_malloc (cs->pending_inbound_msg->pos);
604 memcpy (gn_msg,cs->pending_inbound_msg->buf,cs->pending_inbound_msg->pos); 607 memcpy (gn_msg,cs->pending_inbound_msg->buf,cs->pending_inbound_msg->pos);
608 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"msg->size: %u \n",ntohs (gn_msg->size));
609 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"msg->type: %u \n",ntohs (gn_msg->type));
605 610
606 if ((ntohs(gn_msg->size) == cs->pending_inbound_msg->pos)) 611 //MY VERSION: if ((ntohs(gn_msg->size) == cs->pending_inbound_msg->pos))
612 if ((ntohs(gn_msg->size) <= cs->pending_inbound_msg->pos))
607 { 613 {
608 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)); 614 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));
609 /* forwarding message to transport */ 615 /* forwarding message to transport */
@@ -802,37 +808,48 @@ static int remove_http_message(struct Session * ses, struct HTTP_Message * msg)
802static size_t header_function( void *ptr, size_t size, size_t nmemb, void *stream) 808static size_t header_function( void *ptr, size_t size, size_t nmemb, void *stream)
803{ 809{
804 char * tmp; 810 char * tmp;
805 unsigned int len = size * nmemb; 811 size_t len = size * nmemb;
806 struct Session * ses = stream; 812 struct Session * ses = stream;
807 813
808 tmp = GNUNET_malloc ( len+1 ); 814 tmp = NULL;
809 memcpy(tmp,ptr,len); 815 if ((size * nmemb) < SIZE_MAX)
810 if (tmp[len-2] == 13) 816 tmp = GNUNET_malloc (len+1);
811 tmp[len-2]= '\0'; 817
818 if ((tmp != NULL) && (len > 0))
819 {
820 memcpy(tmp,ptr,len);
821 if (len>=2)
822 {
823 if (tmp[len-2] == 13)
824 tmp[len-2]= '\0';
825 }
812#if DEBUG_CURL 826#if DEBUG_CURL
813 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Header: `%s'\n",tmp); 827 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Header: `%s'\n",tmp);
814#endif 828#endif
815 if (0==strcmp (tmp,"HTTP/1.1 100 Continue")) 829 if (0==strcmp (tmp,"HTTP/1.1 100 Continue"))
816 { 830 {
817 ses->pending_outbound_msg->http_result_code=100; 831 ses->pending_outbound_msg->http_result_code=100;
818 } 832 }
819 if (0==strcmp (tmp,"HTTP/1.1 200 OK")) 833 if (0==strcmp (tmp,"HTTP/1.1 200 OK"))
820 { 834 {
821 ses->pending_outbound_msg->http_result_code=200; 835 ses->pending_outbound_msg->http_result_code=200;
822 } 836 }
823 if (0==strcmp (tmp,"HTTP/1.1 400 Bad Request")) 837 if (0==strcmp (tmp,"HTTP/1.1 400 Bad Request"))
824 { 838 {
825 ses->pending_outbound_msg->http_result_code=400; 839 ses->pending_outbound_msg->http_result_code=400;
826 } 840 }
827 if (0==strcmp (tmp,"HTTP/1.1 404 Not Found")) 841 if (0==strcmp (tmp,"HTTP/1.1 404 Not Found"))
828 { 842 {
829 ses->pending_outbound_msg->http_result_code=404; 843 ses->pending_outbound_msg->http_result_code=404;
830 } 844 }
831 if (0==strcmp (tmp,"HTTP/1.1 413 Request Entity Too Large")) 845 if (0==strcmp (tmp,"HTTP/1.1 413 Request Entity Too Large"))
832 { 846 {
833 ses->pending_outbound_msg->http_result_code=413; 847 ses->pending_outbound_msg->http_result_code=413;
848 }
834 } 849 }
835 GNUNET_free (tmp); 850 if (NULL != tmp)
851 GNUNET_free (tmp);
852
836 return size * nmemb; 853 return size * nmemb;
837} 854}
838 855
@@ -849,8 +866,8 @@ static size_t send_read_callback(void *stream, size_t size, size_t nmemb, void *
849{ 866{
850 struct Session * ses = ptr; 867 struct Session * ses = ptr;
851 struct HTTP_Message * msg = ses->pending_outbound_msg; 868 struct HTTP_Message * msg = ses->pending_outbound_msg;
852 unsigned int bytes_sent; 869 size_t bytes_sent;
853 unsigned int len; 870 size_t len;
854 871
855 /* data to send */ 872 /* data to send */
856 if (( msg->pos < msg->len)) 873 if (( msg->pos < msg->len))
@@ -890,13 +907,16 @@ static size_t send_read_callback(void *stream, size_t size, size_t nmemb, void *
890*/ 907*/
891static size_t send_write_callback( void *stream, size_t size, size_t nmemb, void *ptr) 908static size_t send_write_callback( void *stream, size_t size, size_t nmemb, void *ptr)
892{ 909{
893 char * data = malloc(size*nmemb +1); 910 char * data = NULL;
894 911
895 memcpy( data, stream, size*nmemb); 912 if ((size * nmemb) < SIZE_MAX)
896 data[size*nmemb] = '\0'; 913 data = GNUNET_malloc(size*nmemb +1);
897 /* Just a dummy print for the response recieved for the PUT message */ 914 if (data != NULL)
898 /* GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Recieved %u bytes: `%s' \n", size * nmemb, data); */ 915 {
899 free (data); 916 memcpy( data, stream, size*nmemb);
917 data[size*nmemb] = '\0';
918 free (data);
919 }
900 return (size * nmemb); 920 return (size * nmemb);
901 921
902} 922}
@@ -1154,13 +1174,14 @@ http_plugin_send (void *cls,
1154 void *cont_cls) 1174 void *cont_cls)
1155{ 1175{
1156 char * address; 1176 char * address;
1177 char * url;
1157 struct Session* ses; 1178 struct Session* ses;
1158 struct Session* ses_temp; 1179 struct Session* ses_temp;
1159 struct HTTP_Message * msg; 1180 struct HTTP_Message * msg;
1160 struct HTTP_Message * tmp; 1181 struct HTTP_Message * tmp;
1161 int bytes_sent = 0; 1182 int bytes_sent = 0;
1162 1183
1163 1184 url = NULL;
1164 address = NULL; 1185 address = NULL;
1165 /* find session for peer */ 1186 /* find session for peer */
1166 ses = find_session_by_pi (target); 1187 ses = find_session_by_pi (target);
@@ -1202,31 +1223,27 @@ http_plugin_send (void *cls,
1202 { 1223 {
1203 if (addrlen == (sizeof (struct IPv4HttpAddress))) 1224 if (addrlen == (sizeof (struct IPv4HttpAddress)))
1204 { 1225 {
1205 address = GNUNET_malloc(INET_ADDRSTRLEN + 14 + strlen ((const char *) (&ses->hash))); 1226 address = GNUNET_malloc(INET_ADDRSTRLEN + 1);
1206 inet_ntop(AF_INET, &((struct IPv4HttpAddress *) addr)->ipv4_addr,address,INET_ADDRSTRLEN); 1227 inet_ntop(AF_INET, &((struct IPv4HttpAddress *) addr)->ipv4_addr,address,INET_ADDRSTRLEN);
1207 port = ntohs(((struct IPv4HttpAddress *) addr)->u_port); 1228 port = ntohs(((struct IPv4HttpAddress *) addr)->u_port);
1208 GNUNET_asprintf (&address, 1229 GNUNET_asprintf (&url,
1209 "http://%s:%u/%s", 1230 "http://%s:%u/%s",
1210 address, 1231 address,
1211 port, 1232 port,
1212 (char *) (&ses->hash)); 1233 (char *) (&my_ascii_hash_ident));
1234 GNUNET_free(address);
1213 } 1235 }
1214 else if (addrlen == (sizeof (struct IPv6HttpAddress))) 1236 else if (addrlen == (sizeof (struct IPv6HttpAddress)))
1215 { 1237 {
1216 address = GNUNET_malloc(INET6_ADDRSTRLEN + 14 + strlen ((const char *) (&ses->hash))); 1238 address = GNUNET_malloc(INET6_ADDRSTRLEN + 1);
1217 inet_ntop(AF_INET6, &((struct IPv6HttpAddress *) addr)->ipv6_addr,address,INET6_ADDRSTRLEN); 1239 inet_ntop(AF_INET6, &((struct IPv6HttpAddress *) addr)->ipv6_addr,address,INET6_ADDRSTRLEN);
1218 port = ntohs(((struct IPv6HttpAddress *) addr)->u6_port); 1240 port = ntohs(((struct IPv6HttpAddress *) addr)->u6_port);
1219 GNUNET_asprintf(&address,"http://%s:%u/%s",address,port,(char *) (&ses->hash)); 1241 GNUNET_asprintf(&url,
1220 } 1242 "http://%s:%u/%s",
1221 else 1243 address,port,(char *) (&my_ascii_hash_ident));
1222 { 1244 GNUNET_free(address);
1223 GNUNET_break (0);
1224 return -1;
1225 } 1245 }
1226 } 1246 }
1227
1228 GNUNET_assert (address != NULL);
1229
1230 timeout = to; 1247 timeout = to;
1231 /* setting up message */ 1248 /* setting up message */
1232 msg = GNUNET_malloc (sizeof (struct HTTP_Message)); 1249 msg = GNUNET_malloc (sizeof (struct HTTP_Message));
@@ -1234,7 +1251,7 @@ http_plugin_send (void *cls,
1234 msg->len = msgbuf_size; 1251 msg->len = msgbuf_size;
1235 msg->pos = 0; 1252 msg->pos = 0;
1236 msg->buf = GNUNET_malloc (msgbuf_size); 1253 msg->buf = GNUNET_malloc (msgbuf_size);
1237 msg->dest_url = address; 1254 msg->dest_url = url;
1238 msg->transmit_cont = cont; 1255 msg->transmit_cont = cont;
1239 msg->transmit_cont_cls = cont_cls; 1256 msg->transmit_cont_cls = cont_cls;
1240 memcpy (msg->buf,msgbuf, msgbuf_size); 1257 memcpy (msg->buf,msgbuf, msgbuf_size);
@@ -1313,34 +1330,35 @@ http_plugin_address_pretty_printer (void *cls,
1313 char * address; 1330 char * address;
1314 char * ret; 1331 char * ret;
1315 unsigned int port; 1332 unsigned int port;
1333 unsigned int res;
1316 1334
1317 if (addrlen == sizeof (struct IPv6HttpAddress)) 1335 if (addrlen == sizeof (struct IPv6HttpAddress))
1318 { 1336 {
1319 address = GNUNET_malloc (INET6_ADDRSTRLEN); 1337 address = GNUNET_malloc (INET6_ADDRSTRLEN);
1320 t6 = addr; 1338 t6 = addr;
1321 a6.sin6_addr = t6->ipv6_addr; 1339 a6.sin6_addr = t6->ipv6_addr;
1322 inet_ntop(AF_INET6, &(a6.sin6_addr),address,INET6_ADDRSTRLEN); 1340 inet_ntop(AF_INET6, &(a6.sin6_addr),address,INET6_ADDRSTRLEN);
1323 port = ntohs(t6->u6_port); 1341 port = ntohs(t6->u6_port);
1324 } 1342 }
1325 else if (addrlen == sizeof (struct IPv4HttpAddress)) 1343 else if (addrlen == sizeof (struct IPv4HttpAddress))
1326 { 1344 {
1327 address = GNUNET_malloc (INET_ADDRSTRLEN); 1345 address = GNUNET_malloc (INET_ADDRSTRLEN);
1328 t4 = addr; 1346 t4 = addr;
1329 a4.sin_addr.s_addr = t4->ipv4_addr; 1347 a4.sin_addr.s_addr = t4->ipv4_addr;
1330 inet_ntop(AF_INET, &(a4.sin_addr),address,INET_ADDRSTRLEN); 1348 inet_ntop(AF_INET, &(a4.sin_addr),address,INET_ADDRSTRLEN);
1331 port = ntohs(t4->u_port); 1349 port = ntohs(t4->u_port);
1332 } 1350 }
1333 else 1351 else
1334 { 1352 {
1335 /* invalid address */ 1353 /* invalid address */
1336 GNUNET_break_op (0); 1354 GNUNET_break_op (0);
1337 asc (asc_cls, NULL); 1355 asc (asc_cls, NULL);
1338 return; 1356 return;
1339 } 1357 }
1340 1358 res = GNUNET_asprintf(&ret,"http://%s:%u/",address,port);
1341 ret = GNUNET_malloc(strlen(address) +14);
1342 GNUNET_asprintf(&ret,"http://%s:%u/",address,port);
1343 GNUNET_free (address); 1359 GNUNET_free (address);
1360 GNUNET_assert(res != 0);
1361
1344 asc (asc_cls, ret); 1362 asc (asc_cls, ret);
1345} 1363}
1346 1364
@@ -1426,6 +1444,7 @@ http_plugin_address_to_string (void *cls,
1426 char * address; 1444 char * address;
1427 char * ret; 1445 char * ret;
1428 unsigned int port; 1446 unsigned int port;
1447 unsigned int res;
1429 1448
1430 if (addrlen == sizeof (struct IPv6HttpAddress)) 1449 if (addrlen == sizeof (struct IPv6HttpAddress))
1431 { 1450 {
@@ -1448,10 +1467,9 @@ http_plugin_address_to_string (void *cls,
1448 /* invalid address */ 1467 /* invalid address */
1449 return NULL; 1468 return NULL;
1450 } 1469 }
1451 1470 res = GNUNET_asprintf(&ret,"%s:%u",address,port);
1452 ret = GNUNET_malloc(strlen(address) +6);
1453 GNUNET_asprintf(&ret,"%s:%u",address,port);
1454 GNUNET_free (address); 1471 GNUNET_free (address);
1472 GNUNET_assert(res != 0);
1455 return ret; 1473 return ret;
1456} 1474}
1457 1475
@@ -1617,6 +1635,8 @@ libgnunet_plugin_transport_http_init (void *cls)
1617 long long unsigned int port; 1635 long long unsigned int port;
1618 1636
1619 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Starting http plugin...\n"); 1637 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Starting http plugin...\n");
1638 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"size_t %u\n",sizeof(size_t));
1639 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"uint64_t %u\n",sizeof(uint64_t));
1620 1640
1621 plugin = GNUNET_malloc (sizeof (struct Plugin)); 1641 plugin = GNUNET_malloc (sizeof (struct Plugin));
1622 plugin->env = env; 1642 plugin->env = env;