aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2014-12-19 22:48:34 +0000
committerChristian Grothoff <christian@grothoff.org>2014-12-19 22:48:34 +0000
commitb08d34a822c0dc54381b64f8bbe05a6ce0419c40 (patch)
tree9b3a1652fda22a08806fd49e61538031d2616da0 /src
parente9dbaa33838419da6b4793d2701a52621d4ca43e (diff)
downloadgnunet-b08d34a822c0dc54381b64f8bbe05a6ce0419c40.tar.gz
gnunet-b08d34a822c0dc54381b64f8bbe05a6ce0419c40.zip
-support join_msg=NULL properly
Diffstat (limited to 'src')
-rw-r--r--src/multicast/gnunet-service-multicast.c32
-rw-r--r--src/psyc/psyc_api.c18
2 files changed, 35 insertions, 15 deletions
diff --git a/src/multicast/gnunet-service-multicast.c b/src/multicast/gnunet-service-multicast.c
index 4c1b3f1d7..f4e37865f 100644
--- a/src/multicast/gnunet-service-multicast.c
+++ b/src/multicast/gnunet-service-multicast.c
@@ -943,10 +943,18 @@ client_recv_multicast_message (void *cls, struct GNUNET_SERVER_Client *client,
943{ 943{
944 struct Group * 944 struct Group *
945 grp = GNUNET_SERVER_client_get_user_context (client, struct Group); 945 grp = GNUNET_SERVER_client_get_user_context (client, struct Group);
946 const struct GNUNET_MULTICAST_MessageHeader *
947 msg = (const struct GNUNET_MULTICAST_MessageHeader *) m;
948 struct Origin *orig;
949
950 if (NULL == grp)
951 {
952 GNUNET_break (0);
953 GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
954 return;
955 }
946 GNUNET_assert (GNUNET_YES == grp->is_origin); 956 GNUNET_assert (GNUNET_YES == grp->is_origin);
947 struct Origin *orig = (struct Origin *) grp; 957 orig = (struct Origin *) grp;
948 struct GNUNET_MULTICAST_MessageHeader *
949 msg = (struct GNUNET_MULTICAST_MessageHeader *) m;
950 958
951 msg->fragment_id = GNUNET_htonll (++orig->max_fragment_id); 959 msg->fragment_id = GNUNET_htonll (++orig->max_fragment_id);
952 msg->purpose.size = htonl (ntohs (msg->header.size) 960 msg->purpose.size = htonl (ntohs (msg->header.size)
@@ -975,13 +983,19 @@ static void
975client_recv_multicast_request (void *cls, struct GNUNET_SERVER_Client *client, 983client_recv_multicast_request (void *cls, struct GNUNET_SERVER_Client *client,
976 const struct GNUNET_MessageHeader *m) 984 const struct GNUNET_MessageHeader *m)
977{ 985{
978 struct Group * 986 struct Group *grp = GNUNET_SERVER_client_get_user_context (client, struct Group);
979 grp = GNUNET_SERVER_client_get_user_context (client, struct Group); 987 struct Member *mem;
980 GNUNET_assert (GNUNET_NO == grp->is_origin); 988 const struct GNUNET_MULTICAST_RequestHeader *
981 struct Member *mem = (struct Member *) grp; 989 req = (const struct GNUNET_MULTICAST_RequestHeader *) m;
982 990
983 struct GNUNET_MULTICAST_RequestHeader * 991 if (NULL == grp)
984 req = (struct GNUNET_MULTICAST_RequestHeader *) m; 992 {
993 GNUNET_break (0);
994 GNUNET_SERVER_receive_done (client, GNUNET_SYSERR);
995 return;
996 }
997 GNUNET_assert (GNUNET_NO == grp->is_origin);
998 mem = (struct Member *) grp;
985 999
986 req->fragment_id = GNUNET_ntohll (++mem->max_fragment_id); 1000 req->fragment_id = GNUNET_ntohll (++mem->max_fragment_id);
987 req->purpose.size = htonl (ntohs (req->header.size) 1001 req->purpose.size = htonl (ntohs (req->header.size)
diff --git a/src/psyc/psyc_api.c b/src/psyc/psyc_api.c
index 8cce89704..96aad28ba 100644
--- a/src/psyc/psyc_api.c
+++ b/src/psyc/psyc_api.c
@@ -854,11 +854,15 @@ GNUNET_PSYC_slave_join (const struct GNUNET_CONFIGURATION_Handle *cfg,
854{ 854{
855 struct GNUNET_PSYC_Slave *slv = GNUNET_malloc (sizeof (*slv)); 855 struct GNUNET_PSYC_Slave *slv = GNUNET_malloc (sizeof (*slv));
856 struct GNUNET_PSYC_Channel *chn = &slv->chn; 856 struct GNUNET_PSYC_Channel *chn = &slv->chn;
857
858 uint16_t relay_size = relay_count * sizeof (*relays); 857 uint16_t relay_size = relay_count * sizeof (*relays);
859 uint16_t join_msg_size = ntohs (join_msg->header.size); 858 uint16_t join_msg_size;
860 struct SlaveJoinRequest *req 859 struct SlaveJoinRequest *req;
861 = GNUNET_malloc (sizeof (*req) + relay_size + join_msg_size); 860
861 if (NULL == join_msg)
862 join_msg_size = 0;
863 else
864 join_msg_size = ntohs (join_msg->header.size);
865 req = GNUNET_malloc (sizeof (*req) + relay_size + join_msg_size);
862 req->header.size = htons (sizeof (*req) 866 req->header.size = htons (sizeof (*req)
863 + relay_count * sizeof (*relays)); 867 + relay_count * sizeof (*relays));
864 req->header.type = htons (GNUNET_MESSAGE_TYPE_PSYC_SLAVE_JOIN); 868 req->header.type = htons (GNUNET_MESSAGE_TYPE_PSYC_SLAVE_JOIN);
@@ -870,8 +874,10 @@ GNUNET_PSYC_slave_join (const struct GNUNET_CONFIGURATION_Handle *cfg,
870 if (0 < relay_size) 874 if (0 < relay_size)
871 memcpy (&req[1], relays, relay_size); 875 memcpy (&req[1], relays, relay_size);
872 876
873 if (0 < join_msg_size) 877 if (NULL != join_msg)
874 memcpy ((char *) &req[1] + relay_size, join_msg, join_msg_size); 878 memcpy ((char *) &req[1] + relay_size,
879 join_msg,
880 join_msg_size);
875 881
876 chn->connect_msg = (struct GNUNET_MessageHeader *) req; 882 chn->connect_msg = (struct GNUNET_MessageHeader *) req;
877 chn->cfg = cfg; 883 chn->cfg = cfg;