-/**
- * gras_trp_flush:
- *
- * Make sure all pending communications are done
- */
-void
-gras_trp_flush(gras_socket_t sd) {
- if (sd->plugin->flush)
- (sd->plugin->flush)(sd);
-}
-
-gras_trp_plugin_t
-gras_trp_plugin_get_by_name(const char *name){
- return xbt_dict_get(_gras_trp_plugins,name);
-}
-
-int gras_socket_my_port (gras_socket_t sock) {
- return sock->port;
-}
-int gras_socket_peer_port(gras_socket_t sock) {
- return sock->peer_port;
-}
-char *gras_socket_peer_name(gras_socket_t sock) {
- return sock->peer_name;
-}
-char *gras_socket_peer_proc(gras_socket_t sock) {
- return sock->peer_proc;
-}
-
-void gras_socket_peer_proc_set(gras_socket_t sock,char*peer_proc) {
- sock->peer_proc = peer_proc;
-}
-
-/** \brief Check if the provided socket is a measurement one (or a regular one) */
-int gras_socket_is_meas(gras_socket_t sock) {
- return sock->meas;
-}
-
-/** \brief Send a chunk of (random) data over a measurement socket
- *
- * @param peer measurement socket to use for the experiment
- * @param timeout timeout (in seconds)
- * @param exp_size total amount of data to send (in bytes).
- * @param msg_size size of each chunk sent over the socket (in bytes).
- *
- * Calls to gras_socket_meas_send() and gras_socket_meas_recv() on
- * each side of the socket should be paired.
- *
- * The exchanged data is zeroed to make sure it's initialized, but
- * there is no way to control what is sent (ie, you cannot use these
- * functions to exchange data out of band).
- */
-void gras_socket_meas_send(gras_socket_t peer,
- unsigned int timeout,
- unsigned long int exp_size,
- unsigned long int msg_size) {
- char *chunk=NULL;
- unsigned long int exp_sofar;
-
- XBT_IN;
-
- if (gras_if_RL())
- chunk=xbt_malloc0(msg_size);
-
- xbt_assert0(peer->meas,"Asked to send measurement data on a regular socket");
- xbt_assert0(peer->outgoing,"Socket not suited for data send (was created with gras_socket_server(), not gras_socket_client())");
-
- for (exp_sofar=0; exp_sofar < exp_size; exp_sofar += msg_size) {
- CDEBUG5(gras_trp_meas,"Sent %lu of %lu (msg_size=%ld) to %s:%d",
- exp_sofar,exp_size,msg_size,
- gras_socket_peer_name(peer), gras_socket_peer_port(peer));
- (*peer->plugin->raw_send)(peer,chunk,msg_size);
- }
- CDEBUG5(gras_trp_meas,"Sent %lu of %lu (msg_size=%ld) to %s:%d",
- exp_sofar,exp_size,msg_size,
- gras_socket_peer_name(peer), gras_socket_peer_port(peer));
-
- if (gras_if_RL())
- free(chunk);
-
- XBT_OUT;
-}
-
-/** \brief Receive a chunk of data over a measurement socket
- *
- * Calls to gras_socket_meas_send() and gras_socket_meas_recv() on
- * each side of the socket should be paired.
- */
-void gras_socket_meas_recv(gras_socket_t peer,
- unsigned int timeout,
- unsigned long int exp_size,
- unsigned long int msg_size){
-
- char *chunk=NULL;
- unsigned long int exp_sofar;
-
- XBT_IN;
-
- if (gras_if_RL())
- chunk = xbt_malloc(msg_size);
-
- xbt_assert0(peer->meas,
- "Asked to receive measurement data on a regular socket");
- xbt_assert0(peer->incoming,"Socket not suited for data receive");
-
- for (exp_sofar=0; exp_sofar < exp_size; exp_sofar += msg_size) {
- CDEBUG5(gras_trp_meas,"Recvd %ld of %lu (msg_size=%ld) from %s:%d",
- exp_sofar,exp_size,msg_size,
- gras_socket_peer_name(peer), gras_socket_peer_port(peer));
- (peer->plugin->raw_recv)(peer,chunk,msg_size);
- }
- CDEBUG5(gras_trp_meas,"Recvd %ld of %lu (msg_size=%ld) from %s:%d",
- exp_sofar,exp_size,msg_size,
- gras_socket_peer_name(peer), gras_socket_peer_port(peer));
-
- if (gras_if_RL())
- free(chunk);
- XBT_OUT;
-}
-
-/**
- * \brief Something similar to the good old accept system call.
- *
- * Make sure that there is someone speaking to the provided server socket.
- * In RL, it does an accept(2) and return the result as last argument.
- * In SG, as accepts are useless, it returns the provided argument as result.
- * You should thus test whether (peer != accepted) before closing both of them.
- *
- * You should only call this on measurement sockets. It is automatically
- * done for regular sockets, but you usually want more control about
- * what's going on with measurement sockets.
- */
-gras_socket_t gras_socket_meas_accept(gras_socket_t peer){
- gras_socket_t res;
-
- xbt_assert0(peer->meas,
- "No need to accept on non-measurement sockets (it's automatic)");
-
- if (!peer->accepting) {
- /* nothing to accept here (must be in SG) */
- /* BUG: FIXME: this is BAD! it makes tricky to free the accepted socket*/
- return peer;
- }
-
- res = (peer->plugin->socket_accept)(peer);
- res->meas = peer->meas;
- CDEBUG1(gras_trp_meas,"meas_accepted onto %d",res->sd);
-
- return res;
-}
-
-