diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2010-06-21 11:39:46 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2010-06-21 11:39:46 +0000 |
commit | 36ca30325a5c0f28ba135039c4ef25ad2e9de29f (patch) | |
tree | 506ce073bfadcf0b54c86f1ed2006d5974cf3599 /src | |
parent | ae8ebff34fd7bb776881b6c99ad70c84d11890e6 (diff) | |
download | gnunet-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.c | 174 |
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) | |||
802 | static size_t header_function( void *ptr, size_t size, size_t nmemb, void *stream) | 808 | static 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 | */ |
891 | static size_t send_write_callback( void *stream, size_t size, size_t nmemb, void *ptr) | 908 | static 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; |