diff options
author | Christian Grothoff <christian@grothoff.org> | 2014-12-19 22:48:34 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2014-12-19 22:48:34 +0000 |
commit | b08d34a822c0dc54381b64f8bbe05a6ce0419c40 (patch) | |
tree | 9b3a1652fda22a08806fd49e61538031d2616da0 /src | |
parent | e9dbaa33838419da6b4793d2701a52621d4ca43e (diff) | |
download | gnunet-b08d34a822c0dc54381b64f8bbe05a6ce0419c40.tar.gz gnunet-b08d34a822c0dc54381b64f8bbe05a6ce0419c40.zip |
-support join_msg=NULL properly
Diffstat (limited to 'src')
-rw-r--r-- | src/multicast/gnunet-service-multicast.c | 32 | ||||
-rw-r--r-- | src/psyc/psyc_api.c | 18 |
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 | |||
975 | client_recv_multicast_request (void *cls, struct GNUNET_SERVER_Client *client, | 983 | client_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; |